2016-01-20 48 views
1

我對Laravel非常新,並且正在瀏覽教程,並且遇到了一些問題。Laravel 5.2中的錯誤Eloquent - 無法轉換爲字符串

我有一個複雜的查詢,我需要重用where子句中的一個參數更改。我將其添加爲我的模型中的查詢範圍,然後從我的相應控制器調用它。當我嘗試返回數據,雖然我得到這個錯誤:

Object of class Illuminate\Database\Eloquent\Builder could not be converted to string 

下面是該查詢範圍:

public function scopeCrosstab($wellID) 
{ 
    return static::select('sampleDate', \DB::raw(" 
       max(if(chemID=1, pfcLevel, ' ')) as 'PFOA', max(if(chemID=1, noteAbr, ' ')) as 'PFOANote' 
      ")) 
     ->leftJoin('SampleNote', 'WellSample.noteID', '=', 'SampleNote.noteID') 
     ->where('wellID', '=', $wellID) 
     ->groupBy('sampleDate'); 
} 

這裏是控制器代碼:

public function smith() 
{ 
    $wellSamples = WellSample::crosstab(2); 

    return $wellSamples->get(); 

    //return view('pages.wellsample', compact('wellSamples')); 
} 

我曾嘗試許多不同的用引號括起來的代碼排列,用雙引號等等。如果我在查詢範圍內硬編碼它的值,但是我需要能夠使它成爲動態的。

回答

2

作用域方法至少需要一個參數,其中第一個參數必須是$query。然後,您生成傳遞給您的作用域方法的查詢變量。像這樣:

public function scopeCrosstab($query, $wellID) 
{ 
    return $query->select('sampleDate', \DB::raw(" 
       max(if(chemID=1, pfcLevel, ' ')) as 'PFOA', max(if(chemID=1, noteAbr, ' ')) as 'PFOANote' 
      ")) 
     ->leftJoin('SampleNote', 'WellSample.noteID', '=', 'SampleNote.noteID') 
     ->where('wellID', '=', $wellID) 
     ->groupBy('sampleDate'); 
} 
+0

謝謝 - 做到了。出於好奇,這個$查詢變量是從哪裏來的? – JamesE

+0

它來自Laravel。當你調用該範圍時,通過$ query變量的場景後面有一點「魔力」。 https://laravel.com/docs/5.2/eloquent#local-scopes –

相關問題