2015-06-26 72 views
3

好吧,所以我想執行一個mysql查詢來加入表並返回結果。laravel 5查詢生成器錯誤「必須是類型數組,對象給出」

所以在我的控制,我有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 

任何想法?

回答

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); 
} 

如果你正在你的Services模型中定義的範圍應該DB::table('services')沒有必要(因爲servicesautomatically handled by Eloquent

現在,讓我們來看一個例子Flight模型類,我們將使用從我們flights數據庫表中檢索和存儲信息

+0

非常感謝這工作!然而,我得到的結果實際上是6,當只有2個ID進去。所以它帶回相同的結果3次,這是奇怪的 –

+0

我認爲這可能是由於'join()'語句。您可以通過將' - > get()'更改爲' - > toSql()'來檢查生成的SQL查詢。如果您將該SQL放入PHPMyAdmin(或您正在使用的任何SQL應用程序)中,您將能夠檢查正在生成的SQL,並確定如何編寫正確的'JOIN'語句。 –

+0

謝謝,它在phpmyadmin中也是如此,但我不知道爲什麼啊哈:( –

相關問題