名前付きパラメーターを使用します。これらについては、データベース ページの「Raw SQL クエリの実行」セクションのドキュメントで、名前付きバインディングの使用という小見出しの下で説明されています。引用:
を使用してパラメーター バインディングを表す代わりに、?
名前付きバインディングを使用してクエリを実行できます。
$results = DB::select('select * from users where id = :id', ['id' => 1]);
あなたの場合、これを実行できるはずです:
DB::table('users as u')
->select('id')
->whereRaw('u.id > :id or u.id < :id or u.id = :id', [
'id' => 2,
])
->first();
しかし、LaravelQueryException
はメッセージとともに をスローするようですInvalid parameter number
。これをバグとして報告しました。
本当に使用したい場合whereRaw
は、代わりに変数からパラメーターの配列を作成できます。
$id = 2;
DB::table('users as u')
->select('id')
->whereRaw('u.id > ? or u.id < ? or u.id = ?', [
$id, $id, $id,
])
->first();
またはarray_fill
、値を繰り返すために使用します。
$id = 2;
DB::table('users as u')
->select('id')
->whereRaw('u.id > ? or u.id < ? or u.id = ?', array_fill(0, 3, $id))
->first();
必要がない場合whereRaw
は、代わりにクエリ ビルダーの他の機能を使用して、変数から取得したパラメーターを使用してクエリを少しずつ作成できます。
$id = 2;
DB::table('users')
->select('id')
->where('id', '>', $id)
->orWhere('id', '<', $id)
->orWhere('id', $id)
->first();
クエリ ビルダーは非常に強力で、より複雑なロジックを取得するには、クロージャーをネストできます。いくつかの例については、ドキュメントの関連セクションを参照してください。