Laravel 嵌套关系过滤器

有一个疑问,如何通过翻译关系(按名称列)过滤结果


$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() ;


繁花如伊
浏览 75回答 1
1回答

慕尼黑8549860

在 with() 方法的数组内,您可以将函数作为值传递。Cart::select('product_id','quantity')    ->with([         'product', function($query) {              $query->where($filteringAndConditionsHere);          }    ]);https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
打开App,查看更多内容
随时随地看视频慕课网APP