Laravel の Eloquent モデルで生のデータベース クエリを利用すると、柔軟性が得られ、高度な操作が可能になります。ただし、このようなクエリにパラメータをバインドするのは難しい場合があります。
提供されたクエリ内:
$property = Property::select( DB::raw("title, lat, lng, ( 3959 * acos( cos( radians( ?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians( ? ) ) * sin( radians( lat ) ) ) ) AS distance") ) ->having("distance", "<", "?") ->orderBy("distance") ->take(20) ->setBindings([$lat, $lng, $lat, $radius]) ->get();
クエリでは名前付きプレースホルダ (? とバインドされたパラメータ キーに一致する名前が使用される) が使用されることに注意することが重要です。 ) DB::raw.
このシナリオでパラメータをバインドする鍵は、setBindings メソッドを利用することにあります。このメソッドは、クエリ パラメーターにバインドされる値の配列を受け取ります。例では:
クエリ チェーンの最後で setBindings を呼び出すことにより、パラメータ値が適切に割り当てられます。これにより、「無効なパラメータ番号: 名前付きパラメータと位置パラメータが混在しています」エラーが解決され、生のデータベース クエリを適切に実行できるようになります。
この解決策は明示的に文書化されていないため、イライラする可能性があることに注意してください。ただし、基礎となる仕組みを理解し、提供されている回避策を採用すると、Laravel の Eloquent モデル内で生のデータベース クエリを効果的に利用できるようになります。
以上がEloquentモデルのためにLaravelで生のデータベースクエリにパラメータをバインドする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。