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

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

Barbara Streisand
リリース: 2024-11-20 14:05:13
オリジナル
775 人が閲覧しました

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

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

Laravel の Eloquent モデルで生のデータベース クエリを利用すると、柔軟性が得られ、高度な操作が可能になります。ただし、このようなクエリにパラメータをバインドするのは難しい場合があります。

提供されたクエリ内:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

$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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート