クエリーにおけるプレースホルダ

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') );