Aug 8
逆引きrhaco42: 直接sqlを使う
rhacoにはDBのテーブルを扱うメソッドが各種用意されており、それを使えばかなりなことが出来ます。
しかし、どうしてもそれでは大変な場合などがあります。
例えば:
テーブルA→子テーブルB→孫テーブルC
と2階層以上下のリレーションを持つテーブルデータを含めてデータを取り出したい場合
テーブルA→子テーブルB,C,Dがあるとして、テーブルA→テーブルB間のデータのみ取り出したい場合
などがあります。※
その場合はsqlを直接指定することで対応できます。
$db = new DbUtil(Product::connection());
$result = $db->query('select * from products;');
こんな形で使用します。テーブル名がproductsになっているのに注意してください。またsetup時にテーブルの接頭字を指定している場合はそれも含めて下さい。
この時$resultは成功、失敗をbooleanで示します。結果セットは
−−−−−−−−−−−−−−−追記あり−−−−−−−−−−−−−−−
$resultset = $db->base->resultset();
で取得します。getResultset()というメソッドもありますが、これではとれませんのでご注意下さい。
−−−−−−−−−−−−−−−ここまで−−−−−−−−−−−−−−−
$resultsetの中身はフィールド名をキーとした連想配列になります。そこで中身をテーブルオブジェクトに入れ込みたい場合は適宜
ObjectUtil::hashConvObject($resultset,new Product()); //又は //V::ho($resultset,new Product());
と出来ます。
※追記
本来は
while($db->next()){
$list[] = $this->getResultset();
}
または
$obj = new Product();
while($db->nextObject($obj)){
//$objは上のV::ho($resultset,new Product());を適用した後に相当します。
}
で取得するそうです。tokushimaさん=中の人、ありがとうございました。
このエントリーのはてなブックマーク (