Ad

Error In Laravel 5.2 Eloquent - Cannot Be Converted To String

- 1 answer

I am very new to Laravel and am going through the tutorials and am stuck on something.

I have a complex query that I need to reuse with one parameter change in the where clause. I added this as a query scope in my Model and then call it from my corresponding Controller. When I try to return the data though I am getting this error:

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

Here is the query scope:

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

Here is the Controller code:

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

    return $wellSamples->get();

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

I have tried many different permutations of the code with quotes, with double quotes etc. If I hard code the value in the query scope it works, but I need to be able to make it dynamic.

Ad

Answer

Scope methods take at least one parameter, the first of which must be $query. You then build off of the query variable that is passed to your scope method. Like this:

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');
}
Ad
source: stackoverflow.com
Ad