我有这样的桌子
brands
- id
- name
- status (default=1)
products
- id
- brand_id
- name
,并且我要查询“ 关键字”,因此它应与“ brand.name ”或“ product.name ”匹配。 这是我当前的查询,可以与“ brand.name ”一起正常使用,但是我不确定如何与“ product.name ”一起使用。
Brand::where('status', 1)->where('name', 'like', "%{$keyword}%")->get()->sortBy('name')
这是一对多的关系,因为一个品牌可以拥有许多产品。
答案 0 :(得分:2)
使用whereHas
搜索相关模型。假设hasMany
关系名称为products
。
Brand::where('status', 1)
->where(function ($query) use ($keyword) {
$query->where('name', 'like', "%{$keyword}%")
->orWhereHas('products', function ($query) use ($keyword) {
$query->where('name','LIKE',"%{$keyword}%");
});
})
->get();
有用的读物:Querying Relationship Existence
答案 1 :(得分:1)
尝试此查询:
Brand::leftJoin('products', 'brands.id', '=', 'products.brand_id')
->where('status', 1)
->whereRaw('brands.name like "%'.$keyword.'%" OR products.name like "%'.$keyword.'%"')
->get()->sortBy('name');