LoginSignup
23
24

More than 5 years have passed since last update.

[FuelPHP]ORMのwhere句を活用したModelのfind方法の工夫

Last updated at Posted at 2014-07-21

概要

  1. ある条件に当てはまるイベント情報をviewに表示したい
  2. 条件は"公開が許可されているか"、"期限範囲内か"、"特定のイベントタイプ"
  3. この"特定のイベントタイプ"を複数にしたいときにどうするか

以下に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'),
     ));

みたいな書き方も出来るみたいです。
リファレンスはこの辺。

公式リファレンス

fuelPHPのOrm Modelでfindするときのwhere句の書き方

23
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
24