为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 嵌套关系过滤器

Laravel 嵌套关系过滤器

PHP
繁花如伊 2023-09-22 14:56:24
有一个疑问,如何通过翻译关系(按名称列)过滤结果$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 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

在 with() 方法的数组内,您可以将函数作为值传递。


Cart::select('product_id','quantity')

    ->with([

         'product', function($query) {

              $query->where($filteringAndConditionsHere);

          }

    ]);

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


查看完整回答
反对 回复 2023-09-22
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信