Красноречивый Laravel: где не выбирает таблицу моделей - PullRequest
0 голосов
/ 09 октября 2018

код модели

 public function product(){
        return $this->belongsTo('App\Models\Ecommerce\Product');
 }

Код контроллера

$inv = Inventory::where('is_deleted', 0)->with(['product', 'size','color'])->orderByDesc('id'); 



if($request->inv_filter == 'code'){
    $inv = $inv->whereHas('product', function ($q) use ($request){
    $q->where('code', 'like', "%".$request->searchText."%")->get();
 });
 dd($inv);

Ошибка: инвентаризации.product_id не существует.Но это на самом деле существует.Когда я использовал $ inv-> toSql ().Необработанный sql-запрос неверенКак это исправить?

SELECT * FROM `products` WHERE `inventories`.`product_id` = `products`.`id` AND `code` like `"%jean67%"`

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Не звоните get в закрытии whereHas.Попробуйте следующее:

Inventory::with(['product', 'size', 'color'])->when($request->inv_filter === 'code', function ($builder) {
    $builder->whereHas('product', function ($q) {
        $q->where('code', 'like', "%".request()->searchText."%");
    });
})->where('is_deleted', 0)->orderByDesc('id')->get();
0 голосов
/ 09 октября 2018

В вашем исходном запросе есть проблема, так как в вашем запросе отсутствует оператор JOIN.

 SELECT * FROM products JOIN inventories WHERE products.id = 
 inventories.product_id ;

Этот запрос работает без сбоев, вам нужно

...