今日はZend Frameworkで用意されているZend_Db_Selectクラスを使った便利な方法をメモします。
ま、ZendFrameworkの公式にあるので、そちらを参考に!
Zend Frameworkのコンポーネント達はそのフレームワークを利用せずとも、組み込めるように作られているので、そういう使い方もできますよ(´・ω・`)
インスタンスの生成は、
<?phpこれでZend_Db_Selectのインスタンスが生成されます。
$select = new Zend_Db_Select(Zend_Db_Adapter $db);
Where句は、
<?phpで作れます。
$select->where("id = ?", $id_param, Zend_Db::INT_TYPE);
// WHERE id=$id_param
続けて書けば、
<?phpのようになり、
$select->where("id = ?", $id_param, Zend_Db::INT_TYPE);
$select->where("name = ?", $name_param);
// WHERE id=$id_param AND name='$name_param'
<?phpになります。
$select->where("id = ?", $id_param, Zend_Db::INT_TYPE);
$select->orWhere("name = ?", $name_param);
// WHERE id=$id_param OR name='$name_param'
Order by句は、
<?phpや
$select->order("id");
// ORDER BY id
<?phpになります。
$select->order("id DESC");
// ORDER BY id DESC
Limit Offset句は、
<?phpでできます。
$select->limit(30, 10);
// LIMIT 30 OFFSET 10 または LIMIT 30, 10
Group by句は、
<?phpです。
$select->group("id");
// GROUP BY id
で、ここがとても感動したポイントですが、取得したカラムやテーブルの指定する方法は、
<?php
$select->from("foo_table");
// SELECT * FROM foo_table
<?phpとなるのです(´・ω・`)
$select->from(array("foo" => "foo_table"), "id");
// SELECT foo.id FROM foo_table AS foo
カラムにエイリアス(別名)をつける場合は、
<?phpです。
$select->from(array("foo" => "foo_table"), array("id_aliase" => "id"));
// SELECT foo.id AS id_aliase FROM foo_table AS foo
途中でカラムを追加するには、
<?phpです。
$select->from(array("foo" => "foo_table"), array("id_aliase" => "id"));
$select->columns("name", "name_aliase");
// SELECT foo.id AS id_aliase, foo.name AS name_aliase FROM foo_table AS foo
一気に大量のカラムを書きたい場合は、
<?phpのようにします。
$select->from(array("foo" => "foo_table"), array("id", "name", "birthday", "address",....));
ということは、これらをまとめると、
<?phpのようになるわけです。
$select = new Zend_Db_Select(Zend_Db_Adapter $db);
$select->from(array("foo" => "foo_table"), array("id", "name"));
$select->where("id IN (". implode(",", $id_list).")");
$select->order("id DESC");
$select->limit(30, 10);
// SELECT foo.id, foo.name FROM foo_table AS foo WHERE id IN (x,x,x,x,x) ORDER BY id DESC LIMIT 30 OFFSET 10;
これにZend_Db_Adapterを利用して、
<?phpとかやると、一発で配列でデータを取得できたり、
$result_set = $db->fetchAll($select);
<?phpのように1レコードずつデータ処理を行ったりできます。
$stmt = $db->query($select);
while ($rs = $stmt->fetch()) {
// 処理
}
ちなみに、クエリ文字列を取得するには、
<?phpでできますし、Where句だけ取りたいという場合は
$query = $select->__toString();
<?phpで取れます。
$wheres = $select->getPart(Zend_Db_Select::WHERE);
// where句すべてを配列で取得できるのであとで、implode()とかやれば使える
いやぁ、超便利ーー(´・ω・`)
0 件のコメント:
コメントを投稿