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クラスを渡す。
検索条件のセットはこんな感じで。
->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 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()メソッドも載っています。
No related posts.
[...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]
type:ピンバック [ ]
[...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]
type:ピンバック [ ]
[...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]
type:ピンバック [ ]
[...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]
type:ピンバック [ ]
[...] symfonyのO/RマッパでDBからSELECTするときの検索条件[SYMFONY][PHP] [...]
type:ピンバック [ ]