2016-01-20 47 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 –

相关问题