有一个疑问,如何通过翻译关系(按名称列)过滤结果$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
- 1 回答
- 0 关注
- 74 浏览
添加回答
举报
0/150
提交
取消