laravel 5 Query Builder错误"必须是类型数组,对象给出"

时间:2015-06-26 11:08:53

标签: php mysql laravel laravel-5

好的,所以我试图执行一个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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您未正确使用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')模型中定义范围,则不需要Services(因为services表格为automatically handled by Eloquent

  

现在,让我们看一个示例Flight模型类,我们将使用它来检索和存储来自flights数据库表的信息