クエリーにおけるプレースホルダ
Laravel4
Laravel4の場合、たとえばhogeという名前(name)のユーザー(User)を取得する場合、
基本的にはクエリービルダにより
$user = User::where('name','=','hoge')->first();
で記述するのが、標準的な方法だと思います。
上記ではなく、直接where句をSQLで記述する場合は、プレースホルダを使って
$user = User::whereRaw('name = ?',array('hoge'))->first();
のように記述します。
http://laravel4.kore1server.com/docs/eloquent
では上記の書き方しか例として上げられていませんが、実は名前付きプレースホルダも使えます。
$user = User::whereRaw('name = :name',array(':name'=>'hoge'))->first();
Yii
一方、Yiiでは名前付きプレースホルダが最初の例として記述されています。
$user = User::model()->find('name=:name',array(':name'=>'hoge'));
http://www.yiiframework.com/doc/guide/1.1/ja/database.ar#sec-5
チュートリアルには記述していませんが、Laravel4と同様、名前なしプレースホルダも使えます。
$user = User::model()->find('name=?',array('hoge'));
また、Laravel4のクエリービルダのような書き方はありませんが、あえていうと、次の書き方
が近いです。
$user = User::model()->findByAttributes( array('name'=>'hoge') );
複数条件も可能ですが、この方法では条件として「等しい」場合しか使えないので、もう少し柔軟に
クエリーを作りたい場合は、クライテリア(CDbCriteria)を作る必要があります。
$criteria = new CDbCriteria;
$user = User::model()->find( $criteria->compare('name','hoge') );
「等しい」以外の例としては、
$criteria = new CDbCriteria;
$criteria->order = 'age desc';
$user = User::model()->find( $criteria->compare('age','<20') );