Laravel具有LIKE选项的一对多关系查询

时间:2019-11-11 07:01:58

标签: php laravel eloquent

我有这样的桌子

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')

这是一对多的关系,因为一个品牌可以拥有许多产品。

2 个答案:

答案 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');