Search code examples
laravellaravel-5.3laravel-5.4laravel-5.5

Laravel with relation - Column not found


I use this query:

$clients = Client::with("types", "results")->where(function ($query) use ($issued, $mode, $request) {

      if (($request->get("filter"))) {
         $query->where('issued', $issued);
      }
    }

And results relation is:

public function results()
    {
        return $this->hasOne('App\ResultTest', 'client_id', 'unique_code');
    }

Table ResultTest' has client_id field and issued. It is joined with current table as:

Client.uqique_code = ResultTest.clients. 

Now table ResultTest is empty.

It returns me an error:

Unknown column 'issued' in 'where clause' (SQL: select count(*) as aggregate from `clients` where (`issued` = 1))

I tried this way, that was recommended in answers below:

$clients->with(["results" => function($query) use ($issued, $request, $mode) {
            $query->where('issues', $issued);

            if (($request->get("mode"))) {
                $query->whereIn('mode', $mode);
            }

        }])->orderBy('created_at', 'desc')->paginate();

It gives the same error:

 Unknown column 'issues' in 'where clause' (SQL: select * from `result_test` where `result_test`.`client_id` in (342074, 160374, 596433) and `issues` = 0)

Solution

  • After a long chat we found the following solution:

    if($request->has('filter') || $request->has('mode')) { 
        $builder->whereHas('results', function ($query) use ($request) { 
    
            if (($request->has("filter"))) { 
                $query->where('issued', $request->get('filter')); 
            } 
    
            if (($request->has("mode"))) { 
                $query->whereIn('mode', $request->get('mode')); 
            } 
        }); 
    }