概要
- ある条件に当てはまるイベント情報をviewに表示したい
- 条件は"公開が許可されているか"、"期限範囲内か"、"特定のイベントタイプ"
- この"特定のイベントタイプ"を複数にしたいときにどうするか
以下にORMモデルのコントローラーの例
$events = Model_Event::find("all",array(
"related" => array("eventtype"),
"where" => array(
array("is_available","1"),
array("is_public","1") ,
array("event_type_id","3")
),
'order_by' => array('orders' => 'asc'),
));
方法 ①foreachやfor文で処理
- 条件を自由に指定出来る
- ループ数が増えるほど読み込みが遅くなる
- コードの行数が多く分かり辛い
$events = Model_Event::find("all",array(
"related" => array("eventtype"),
"where" => array(
array("is_available","1"),
array("is_public","1")
),
'order_by' => array('orders' => 'asc'),
));
//イベントIDが1のものを除外する処理
foreach ($events as $key => $value) {
if($events[$key]->event_type_id == 1) {
unset($events[$key]);
}
}
方法 ②ORMマッピングのwhere句を活用(オススメ)
- 余計なコードを書かなくて済む
- 複雑な条件指定は出来なそう(まだ使い尽くしてないのでなんとも)
$events = Model_Event::find("all",array(
"related" => array("eventtype"),
"where" => array(
array("is_available","1"),
array("is_public","1")
array("event_type_id","3"),
//指定したい別のIDを"or"で指定
"or" => array("event_type_id","4"),
),
'order_by' => array('orders' => 'asc'),
));
こちらのほうが見た目も条件も割とスマートですね。
おまけ 全然条件を変えたいときは"or_where"なども使える
検索条件1と2を大きく変えたいときは
$events = Model_Event::find("all",array(
"related" => array("eventtype"),
"where" => array(
array("is_available","1"),
array("is_public","1")
array("event_type_id","3"),
),
"or_where" => array(
//ここに条件を記載
),
'order_by' => array('orders' => 'asc'),
));
みたいな書き方も出来るみたいです。
リファレンスはこの辺。