Criteriaを使用したSelectクエリの作成
Criteriaを使ったSelectクエリの作り方メモ。
とりあえずサンプル用テーブル定義
# config/schema.yml user: _attributes: { phpName: User } id: account: { type: varchar(32) } name: { type: varchar(255) } created_at: updated_at: _uniques: unique_account: [account] data: _attributes: { phpName: Data } id: user_id: content: { type: longvarchar } created_at: updated_at:
「symfony propel-build-all」して準備完了。
1.プライマリキーから
<?php $user = UserPeer::retrieveByPk(1);
2.単純なクエリ
<?php $c = new Criteria(); $c->add(UserPeer::ACCOUNT, 'hoge'); $user = UserPeer::doSelectOne($c); echo $user->getName();
3.JOINを使ったクエリ
<?php $c = new Criteria(); $c->addJoin(DataPeer::USER_ID, UserPeer::ID); $c->add(UserPeer::ID, 1); $rs = DataPeer::doSelectJoinUser($c); // userテーブルもJOINしてとってくる foreach($rs as $r){ echo $r->getContent(); echo $r->getUser()->getName(); }
4.Whereを使ったクエリ
<?php $c = new Criteria(); $c->add(UserPeer::ID, 2, Criteria::GREATER_EQUAL); // >= 2 $c->add(UserPeer::ID, 1, Criteria::GREATER_THAN); // > 1 $c->add(UserPeer::ID, 9, Criteria::LESS_EQUAL); // <= 9 $c->add(UserPeer::ID, 9, Criteria::LESS_THAN); // < 9 $c->add(UserPeer::ID, array(1,3,5), Criteria::IN); // IN (1,3,5) $c->add(UserPeer::ID, array(2,4,6), Criteria::NOT_IN); // NOT IN (2,4,6) $c->add(UserPeer::ACCOUNT, 'hoge%', Criteria::LIKE); // LIKE 'hoge%' $c->add(UserPeer::ACCOUNT, 'fuga', Criteria::NOT_EQUAL); // <> 'fuga' $data = UserPeer::doSelect($c); foreach($rs as $r) { echo $r->getName(); }
5.ORとかANDとか
<?php $c = new Criteria(); $criterion = $c->getNewCriterion(UserPeer::ID, 1); $criterion->addOr($c->getNewCriterion(UserPeer::ACCOUNT, 'hoge')); $c->add($criterion); $c->add(UserPeer::ID, 10, Criteria::LESS_THAN); $user = UserPeer::doSelect($c);