【问题标题】:Laravel Eloquent like relationship with whereHasLaravel Eloquent 与 whereHas 的关系
【发布时间】:2020-12-23 13:32:55
【问题描述】:

我正在尝试在关系中搜索,而我的查询是

            $records = Store::orderBy($columnName,$columnSortOrder)
               ->where('store_id', 'like', '%' .$searchValue . '%')
                ->whereHas('customer', function ($query) use ($searchValue) {
                     $query->where('name', 'like', '%' .$searchValue . '%');
                })                 
               ->select('*')
               ->skip($start)
               ->take($rowperpage)
               ->get();

并返回一个查询

    SELECT * FROM `store` WHERE `store_id` LIKE '%San%' AND EXISTS ( SELECT * FROM `customers` 
WHERE `store`.`customer_id` = `customers`.`id` AND `name` LIKE '%San%') ORDER BY 
`inv_id` ASC LIMIT 10 OFFSET 0

我想要的是或与关系

SELECT * FROM `store` WHERE `store_id` LIKE '%San%' OR EXISTS ( SELECT * FROM `customers` 
WHERE `store`.`customer_id` = `customers`.`id` AND `name` LIKE '%San%') ORDER BY 
`inv_id` ASC LIMIT 10 OFFSET 0

【问题讨论】:

  • 我认为您只需将 whereHas() 更改为 orWhere()

标签: php mysql laravel-5 eloquent


【解决方案1】:

不要使用whereHas,而是使用orWhereHas

$records = Store::orderBy($columnName,$columnSortOrder)
           ->where('store_id', 'like', '%' .$searchValue . '%')
            ->orWhereHas('customer', function ($query) use ($searchValue) {
                 $query->where('name', 'like', '%' .$searchValue . '%');
            })                 
           ->select('*')
           ->skip($start)
           ->take($rowperpage)
           ->get();

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2021-09-05
    • 2018-06-19
    • 2022-08-19
    • 2020-09-16
    • 2014-01-11
    • 2020-10-02
    • 2018-10-18
    • 2019-08-12
    相关资源
    最近更新 更多