ホームページ  >  記事  >  データベース  >  EloquentモデルのためにLaravelで生のデータベースクエリにパラメータをバインドする方法?

EloquentモデルのためにLaravelで生のデータベースクエリにパラメータをバインドする方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-20 14:05:13612ブラウズ

How to Bind Parameters to Raw Database Queries in Laravel for Eloquent Models?

Eloquent モデル用の Laravel の生のデータベース クエリへのパラメーターのバインド

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 メソッドを利用することにあります。このメソッドは、クエリ パラメーターにバインドされる値の配列を受け取ります。例では:

  • $lat と $lng は ? にバインドされています。緯度と経度を表すプレースホルダー。
  • $lat は、コサイン関数の 2 番目の位置引数を考慮して再びバインドされます。
  • $radius は ? にバインドされます。 Having 句のプレースホルダ。

クエリ チェーンの最後で setBindings を呼び出すことにより、パラメータ値が適切に割り当てられます。これにより、「無効なパラメータ番号: 名前付きパラメータと位置パラメータが混在しています」エラーが解決され、生のデータベース クエリを適切に実行できるようになります。

この解決策は明示的に文書化されていないため、イライラする可能性があることに注意してください。ただし、基礎となる仕組みを理解し、提供されている回避策を採用すると、Laravel の Eloquent モデル内で生のデータベース クエリを効果的に利用できるようになります。

以上がEloquentモデルのためにLaravelで生のデータベースクエリにパラメータをバインドする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。