BLOG ENTRY

symfonyのO/RマッパでDBからSELECTするときの検索条件[PHP][SYMFONY]

symfony

symfonyのO/RマッパでDBからSELECTするときの検索条件について簡単にまとめてみる。

例えば
プロジェクト名:sampleproject
アプリケーション名:bbs
モジュール名:bbsdata
モデル名:bbsData

でMySQLは
DB名:sample
テーブル名:bbs_sample

の場合のActionクラスへの記述。

とりあえず全件取得

★モデル名★PeerクラスのdoSelectメソッドを静的に使う。

$this->bbs_dataList = bbsDataPeer::doSelect(new Criteria());
//★モデル名★Peer::doSelect(Criteriaクラスのインスタンス)

検索条件にプライマリーキーを使う場合

プライマリーキーから1件の検索をする場合は
retrieveByPk()メソッドを
プライマリーキーから条件検索をする場合は
retrieveByPks()メソッドを
★モデル名★Peerクラスから静的に使う。

//idが2のデータを抽出する
$this->bbs_data = bbsDataPeer::retrieveByPk(2);
//★モデル名★Peerクラス::retrieveByPk(プライマリーキー)

//idが2,3,4,5,6のデータを抽出する
$this->bbs_data = bbsDataPeer::retrieveByPk(2,3,4,5,6);
//★モデル名★Peerクラス::retrieveByPks(プライマリーキー1,プライマリーキー2,・・・)

検索条件にプライマリーキー以外を使う場合

1:Criteriaクラスのインスタンスを作成し、検索条件をセット。
2:その後、★モデル名★PeerクラスのdoSelect()メソッドを呼び出して、引数にCritetiaクラスを渡す。

WHERE句の構文

検索条件のセットはこんな感じで。

->getNewCriterion(★モデル名★Peer::カラム, '検索値', '条件');

例えばActionクラスに以下のコードを書いた場合・・・

$c = new Criteria();
$c1 = $c->getNewCriterion(bbsDataPeer::TITLE, 'はじめまして');
$c2 = $c->getNewCriterion(bbsDataPeer::EMAIL, '%gmail.co%', Criteria::LIKE);
$c3 = $c->getNewCriterion(bbsDataPeer::CREATED_AT, '2008-09-19 09:00:00', Criteria::GREATER_EQUAL);
$c4 = $c->getNewCriterion(bbsDataPeer::CREATED_AT, '2008-09-24 21:00:00', Criteria::LESS_EQUAL);
$c1->addOr($c2);
$c1->addOr($c3);
$c->add($c1);
$c->add($c4);
$c->setOffset(3);
$c->setLimit(10);
$c->addAscendingOrderByColumn(bbsDataPeer::USERNAME);
$this->bbs_dataList = bbsDataPeer::doSelect($c);

以上のコードは以下のSQL文として処理される。
(デバッグモードでSQL文の確認が可能)

SELECT bbs_sample.ID, bbs_sample.TITLE, bbs_sample.USERNAME,
       bbs_sample.EMAIL, bbs_sample.COMMENT, bbs_sample.CREATED_AT,
       bbs_sample.UPDATED_AT, UPPER(bbs_sample.USERNAME)
FROM   bbs_sample
WHERE  ((bbs_sample.TITLE='はじめまして' OR bbs_sample.EMAIL LIKE '%gmail.co%')
       OR bbs_sample.CREATED_AT>='2008-09-19 09:00:00')
       AND bbs_sample.CREATED_AT<='2008-09-24 21:00:00'
ORDER BY UPPER(bbs_sample.USERNAME) ASC LIMIT 3, 10

WHERE句の構文いろいろ

//WHERE column = value
->add(column, value);

//WHERE column <> value
->add(column, value, Criteria::NOT_EQUAL);

//> , <
Criteria::GREATER_THAN, Criteria::LESS_THAN

//>=, <=
Criteria::GREATER_EQUAL, Criteria::LESS_EQUAL

//IS NULL, IS NOT NULL
Criteria::ISNULL, Criteria::ISNOTNULL

//LIKE, ILIKE
Criteria::LIKE, Criteria::ILIKE

//IN, NOT IN
Criteria::IN, Criteria::NOT_IN

//ORDER BY column ASC
->addAscendingOrderByColumn(column);

//ORDER BY column DESC
->addDescendingOrderByColumn(column);

//LIMIT limit
->setLimit(limit)

//OFFSET offset
->setOffset(offset)

//FROM table1, table2 WHERE table1.col1 = table2.col2
->addJoin(col1, col2)

//FROM table1 LEFT JOIN table2 ON table1.col1 = table2.col2
->addJoin(col1, col2, Criteria::LEFT_JOIN)

//FROM table1 RIGHT JOIN table2 ON table1.col1 = table2.col2
->addJoin(col1, col2, Criteria::RIGHT_JOIN)

クラスで利用可能なその他のメソッド

lib/model/om/フォルダの中のBaseファイルを見る。
/var/www/sampleproject/lib/model/om/Base★モデル名★Peer.php
の中にdoSelect()メソッドもretrieveByPk()メソッドも載っています。

その他関連記事orリンク

No related posts.

  • name:symfony1.1.1をLinux(CentOS5.2)にインストールする[PHP][symfony] | Web&MUSICブログ QUALL
  • date:2008/09/27
  • [...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]

  • type:ピンバック [ ]

  • name:symfony1.1で掲示板のようなものを作るレシピ[PHP][symfony] | Web&MUSICブログ QUALL
  • date:2008/09/27
  • [...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]

  • type:ピンバック [ ]

  • name:symfony1.1.1をLinux(CentOS5.2)にインストールする[PHP][symfony] | Web&MUSICブログ QUALL
  • date:2009/06/30
  • [...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]

  • type:ピンバック [ ]

  • name:symfony1.1で掲示板のようなものを作るレシピ[PHP][symfony] | Web&MUSICブログ QUALL
  • date:2009/09/01
  • [...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]

  • type:ピンバック [ ]

  • name:symfony1.1.1をwindowsのxamppにインストールする[PHP][symfony] | Web&MUSICブログ QUALL
  • date:2009/09/01
  • [...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]

  • type:ピンバック [ ]

    WRITE COMMENT


    (required)


    (required)


    (required)

    MENU

    veltica creative of twitter