将原始数据库查询与 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 模型中有效地利用原始数据库查询。
以上是如何在 Laravel 中将参数绑定到原始数据库查询以获得 Eloquent 模型?的详细内容。更多信息请关注PHP中文网其他相关文章!