好的,所以我试图执行一个
mysql查询加入表并返回结果.
所以在我的控制器中我有一个serviceIDs数组,当print_r()看起来像这样:
Array
(
[0] => 50707
[1] => 50709
)
该数组的名称是$serviceIDS
好的然后我现在从我的一个模型中调用一个函数.这是一个范围如下所示:
$services = Services::getWatchListInfo($serviceIDS)->get();
这是我模型中的范围函数:
public function scopegetWatchListInfo($serviceIDS){
$services = DB::table('services')
->join('reviews','services.serviceID','=','reviews.serviceID')
->select('services.name','services.type','services.review_count_approved','reviews.escalate','reviews.average_rating')
->whereIn('serviceID',$serviceIDS);
return $services;
}
好的,所以这应该得到我的服务和评论表的结果,其中服务ID在数组中.
相反,我得到以下错误.
Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, object given, called in /Users/user/sites/informatics-2/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 311 and defined
有任何想法吗?
最佳答案 您没有正确使用Eloquent范围.如果您是
read the docs,那么您正在尝试使用动态范围,因此您需要将范围定义为:
/**
* getWatchList Eloquent Scope
*
* @param object $query
* @param array $servicesIDS
* @return object $query
*/
public function scopegetWatchListInfo($query, $serviceIDS = []) {
return $query
->join('reviews','services.serviceID','=','reviews.serviceID')
->select('services.name','services.type','services.review_count_approved','reviews.escalate','reviews.average_rating')
->whereIn('serviceID', $serviceIDS);
}
如果您在服务模型中定义范围,则不应该使用DB :: table(‘services’)(因为服务表是automatically handled by Eloquent:
Now, let’s look at an example
Flight
model class, which we will use to retrieve and store information from ourflights
database table