Zend_Db_SelectはSELECT文を作成するクラスです。
前回は自力でSQL文を書いていましたが、抽出するカラムや抽出条件などをSQLを直接書くこと無しに作成することができます。
zend_db2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
//Zend_Form
require_once('Zend/Db.php');
$form = new Zend_Db();
//DBインスタンス
$db=Zend_Db::factory(
'Pdo_Mysql'
,array(
'host'=>'localhost'
,'username'=>'testuser'
,'password'=>'testpass'
,'dbname'=>'zend_test'
,'profiler'=>true
)
);
$db->getProfiler()->setEnabled(true);
//Zend_Db_Selectインスタンス取得
$select=new Zend_Db_Select($db);
// SELECT * FROM books
$select->from('books');
// LEFT JOIN author ON author.id=books.author_id
$select->joinLeft('author','author.id=books.author_id');
// WHERE books.id=1
$select->where('books.id = ?',1);
// ORDER BY books.id DESC
$select->order('books.id DESC');
// LIMIT 1
$select->limit(1);
/*
メソッドチェーンも可能
$select->from('books')
->joinLeft('author','author.id=books.author_id')
->where('books.id = ?',1)
->order('books.id DESC')
->limit(1);
*/
//取得は何故かメソッドチェーンできない
$query=$select->query();
$books=$query->fetchAll();
|
このようにメソッドを繋げることで、最終的に
SELECT `books`.*, `author`.* FROM `books` LEFT JOIN `author` ON author.id=books.author_id WHERE (books.id = 1) ORDER BY `books`.`id` DESC LIMIT 1
というSQLが完成します。
またZend_Db_Selectはメソッドチェーンに対応しており、コメントアウトしてあるようなかんじで一気にメソッドを組み立てることもできます。
まあここらへんは好きな方で書けばいいでしょう。
ただ、fromやjoinなんかはほいほいメソッドチェーン繋げられるのに、何故か結果の取得だけはメソッドチェーンできません。
$Zend_Db_Select->query->fetchOne()
なんてことができず、一旦queryを発行してZend_Db_Statementオブジェクトを受け取った後fetchしなければなりません。
残念。
今回は固定クエリなのであまりメリットが見えませんが、検索条件が変動する場合などに威力を発揮します。
SQLをわざわざ組み立てる必要がなく、whereメソッドを追加したりしなかったりするだけでいいので作成が楽です。
PR
トラックバック
トラックバックURL: