あいどる💖たいむ

あいどるやってます。

Phalcon model find メモ

主キー検索

findFirstメソッドの引数にキー値を渡す。

Hoge::findFirst("1");

主キーが複合キーのときは、

Hoge::find("ham=1 and spam=1");

のようにするとか、下記conditionを使う。

1つのカラムの値を指定した検索

<モデル>::findBy<プロパティ名>(<検索値>)のように検索できる。

Users::findById(4); // id = 4のユーザを検索
Users::findBySex('male'); // sex = `male`のユーザを検索

オプションを使ったfindメソッド

findの引数に配列を渡すことで、いろんな検索が可能。

$a = Users::find(
    [
        'conditions' => 'name = ?1',
        'bind' => [
            1 => 'spam',
        ]
    ]
);

?1はプレースホルダで,直下にあるbindで値を指定する。
また、引数の配列の1つ目は、条件とみなされるので、conditionsは明示的に記述しなくてもOK。(個人的にはあったほうが分かりやすいので必ず書くことにする)

var_dump($a->count());
$a = Users::find(
    [
        'name = ?1',
        'bind' => [
            1 => 'spam',
        ]
    ]
);

プレースホルダは文字列も使える。その場合は:<プレースホルダ名>:とし、bindのキーは文字列"<プレースホルダ名>"とする。

$a = Users::find(
    [
        'conditions' => 'name = ?1 and id= :id:',
        'bind' => [
            1 => 'aaa',
            'id' => 4
        ]
    ]
);

オプションで、group byやorder byをかけることもできるので、以下のリンクにある表を参考に組み立てる。

docs.phalconphp.com

Criteriaを使った検索

findを使った検索よりSQLに近い感じで書けるので、こっちのほうが好き。 query()メソッドでPhalcon\Mvc\Model\Criteriaオブジェクトが返ってくるので、これのメソッドを呼び出して、SQLを組み立てるイメージ。

$a = Users::query()
    ->where('sex=?1')
    ->orderBy('name')
    ->bind([1 => 'female'])
    ->execute();

left joinなどもできるので、以下を参考に実装する。

docs.phalconphp.com

おわりに

個人では、簡単な検索はfind使って、 複数条件指定やソートなどがあるときはCriteriaを使った検索を使うようにしたい。