首页 > 解决方案 > Laravel Eloquent 与 whereHas 的关系

问题描述

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

            $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

标签: phpmysqllaravel-5eloquent

解决方案


而不是使用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();

推荐阅读