Laravel фильтр вложенных отношений - PullRequest
1 голос
/ 07 августа 2020

Есть запрос, как я могу отфильтровать результаты по соотношению перевода (по столбцу имени)

$item = Cart::select('product_id','quantity')
->with(['product.translation:product_id,name','product.manufacturer:id,name'])
->where($cartWhere)
->get();

моя модель

Cart.php

    public  function product($language = null)
    {
        return $this->hasOne('App\Models\Product','id','product_id');
    }

Product.php

    public  function translations()
    {
        return $this->hasMany('App\Models\ProductTranslation','product_id','id'); 
    }

Обновить v1.0

сделать так, но запрос занимает слишком много времени

            $item = Cart::select('product_id','quantity')
                ->with(['product.translation', 'product.manufacturer:id,name'])
                ->where($cartWhere)
                ->when($search,function ($q) use ($search) {
                    $q->whereHas('product.translation', function (Builder $query) use ($search) {
                        $query->where('name', 'like', '%'.$search.'%');
                        $query->select('name');
                    });
                }
                )
                ->get() ;

1 Ответ

0 голосов
/ 07 августа 2020

Внутри массива в вашем методе with () вы можете передать функцию как значение.

Cart::select('product_id','quantity')
    ->with([
         'product', function($query) {
              $query->where($filteringAndConditionsHere);
          }
    ]);

https://laravel.com/docs/7.x/eloquent-relationships#eager -loading

...