まいける's Tech Blog

LAMP関係のメモなどを不定期に掲載します

Laravel クエリビルダの whereRaw メソッドでプレースホルダを使う

Laravel 5.5 のドキュメントには記載があるのに(日本語版英語版)、それ以前のドキュメントには、なぜか記載がないのですが、クエリビルダの whereRaw メソッドでプレースホルダを使うときは、名前付きプレースホルダではなく、疑問符プレースホルダを使う必要があります。

$orders = DB::table('orders')
    ->whereRaw('price > IF(state = "TX", ?, 100)', [200])
    ->get();

名前付きプレースホルダを使うと、以下のエラーが出ます

Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters'