カテゴリー
db

Laminas dbの例(fetchAll的)

日本語記事が意外と見つからないzend db的にはfetchAllに該当するサンプル

use Laminas\Db\Adapter\Adapter;
use Laminas\Db\ResultSet\ResultSet;
use Laminas\Db\Sql\Sql;

$sql = "SELECT * FROM item WHERE id = ?";
$statement = $adapter->createStatement($sql, [$id]);
$result = $statement->execute();
$items = new ResultSet;
$items->initialize($result);
$rows = $items->toArray();

プレイスホルダーも使えます。
$itemsの時点だとオブジェクトです。
toArrayでfetchAllの時のように配列になります。

driverによっては?(ハテナ・クエスチョン)が使えず$1..を使わないといけないかもしれません。
例えばドライバーがPgsqlだと、?が使えません。

zend1の時のように、短く書ける方法をご存じの方はお知らせくださいm(__)m

カテゴリー
db

Laminas dbのトランザクション

Laminas dbの公式のマニュアルにも見つけられないが、トランザクションは以下の方法で行えるようだ。


$adapter->getDriver()->getConnection()->beginTransaction();
$adapter->getDriver()->getConnection()->commit();
$adapter->getDriver()->getConnection()->rollback();

作成された最後のIDを取得することもできるみたい

$adapter->getDriver()->getConnection()->getLastGeneratedValue();

pgSQLを使用している場合は、最後に作成されたIDを返すシーケンスを追加する必要があるらしい。

$adapter()->getDriver()->getConnection()->getLastGeneratedValue(‘hoge_hogeid_seq’);

カテゴリー
db

laminas db insert

insert(挿入)

zend_dbのinsert文は簡単だったなぁ…


use Laminas\Db\Adapter\Adapter;
 
$db = new Adapter([
    'driver'   => 'Pdo_Pgsql', //postgresを使う場合
    'database' => 'データベース名',
    'username' => 'ユーザー名',
    'password' => 'ユーザーパスワード',
]);
$sql = new Sql($db);
$insert = $sql->insert("item");
$insert->values([
    'name' => 'test',
    'kosu' => 1
]);
$statement = $sql->prepareStatementForSqlObject($insert);
$results = $statement->execute(); 

もっと短く書ける方法をご存じの方はお知らせくださいm(__)m