Laravel使用laravel-translatable时如何同时搜索翻译表和关联属性表字段
控制器代码调整
直接修改你的search方法如下即可:
public function search(Request $request) { $search = $request->input('search'); $products = Product::where(function ($query) use ($search) { // 匹配翻译表的产品名称 $query->whereTranslationLike('name', '%' . $search . '%'); // 匹配关联属性表的SKU字段 $query->orWhereHas('attributes', function ($subQuery) use ($search) { $subQuery->where('sku', 'like', '%' . $search . '%'); }); })->with('attributes')->get(); return view('search', compact('products')); }
代码说明
- 外层的
where闭包是为了对两个搜索条件做逻辑分组,避免后续如果加其他全局查询条件时出现逻辑错乱 orWhereHas方法会查询关联的attributes表中是否存在符合SKU模糊匹配条件的记录,只要产品下有任意一个属性的SKU匹配搜索词,该产品就会被命中- 如果你的SKU需要精确匹配,直接去掉代码中的
%通配符即可 - 视图代码无需做任何修改,原有的关联数据渲染逻辑可以直接复用
内容的提问来源于stack exchange,提问作者user2519032
相关产品推荐
相关产品推荐

