首页  >  文章  >  数据库  >  如何在 Laravel 中将参数绑定到原始数​​据库查询以获得 Eloquent 模型?

如何在 Laravel 中将参数绑定到原始数​​据库查询以获得 Eloquent 模型?

Barbara Streisand
Barbara Streisand原创
2024-11-20 14:05:13612浏览

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

将参数绑定到 Laravel 中用于 Eloquent 模型的原始数据库查询

将原始数据库查询与 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 再次绑定以说明余弦函数中的第二个位置参数。
  • $radius 绑定到 ? having 子句中的占位符。

通过在查询链末尾调用 setBindings,可以正确分配参数值。这解决了“无效参数号:混合命名和位置参数”错误,并允许正确执行原始数据库查询。

值得注意的是,该解决方案没有明确记录,这可能会令人沮丧。然而,了解底层机制并采用提供的解决方法使您能够在 Laravel 的 Eloquent 模型中有效地利用原始数据库查询。

以上是如何在 Laravel 中将参数绑定到原始数​​据库查询以获得 Eloquent 模型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn