忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/03/28 19:15 |
ZF-03:Zend_Db_Select

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
<?php
    
    //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


2009/10/02 22:24 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<CakePHP-03:CakePHPで複数のテーブルを結合 | HOME | XAMPPのmy.cnfが無くなった?>>
忍者ブログ[PR]