FuelPHPでDBをアクセスしたい場合、FuelPHP標準でO/Rマッパや、Model_Crud、クエリビルダー、DB::query()メソッドなど、様々なアクセス方法が用意されています。
簡単なプログラムを作る場合は、O/Rマッパ(ORMパッケージ)などを使ってもよいのですが、データのアクセスが多くなることが予測される場合、DBアクセスが抽象化された形での処理はパフォーマンスが低下する問題が後々出てきてしまいます。
このようなリスクがある場合、SQLを直接かけるDB::query()メソッドを使用すると、抽象化によるオーバーヘッドもないし、DBサーバの実行計画を見ながら詳細なクエリのチューニングが行えます。(一方で、もちろん、最初にシステム構築する際の開発コストが増えますが…)
今回は、DB::query()メソッドを使用したDBアクセスのサンプルを説明します。
DBへの接続定義
プログラム作成に先立ち、DBへの接続定義が必要です。開発環境の場合は、fuel/app/config/development/db.phpを編集します。
仮に、ID/PASSがuser001/passで、データベース”TEST”に接続したい場合は、下記のような定義になります
<?php /** * The development database settings. These get merged with the global settings. */ return array( 'default' => array( 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=TEST', 'username' => 'user001', 'password' => 'pass', ), ), ); |
DBクラスを使って検索を行う
最低限の検索処理は以下のような形になります
$sql = 'SELECT * FROM items WHERE id >= :min_id ORDER BY id'; $query = \DB::query($sql); $query->parameters( array('min_id'=>10 ) ); $itemList = $query->execute()->as_array(); var_dump( $itemList ); |
DBクラスを使用する場合、データは配列として一度に取得されます。
ですので、結果が多くなる場合(10万行など)は、メモリ不足になってしまいます。
このような場合、他のフレームワークが用意しているDBアクセスクラスだとfetch()といったメソッドで、カーソルから1行づつ取得できたりしますが、FuelPHPの場合はカーソルを使用したデータアクセスはありません。
DBクラスを使って更新を行う
こちらはデータの追加・更新・削除する場合のサンプルです。
基本的にselectと同じですが、返される結果セットがないためas_array()は不要です。
$sql = 'UPDATE items SET name = :name WHERE id = :id'; $query = \DB::query($sql); $query->parameters( array('name'=>'taro', 'id'=>1 ) ); $itemList = $query->execute(); |
関連記事
コメントを残す