Laravel - whereHas 查询没有返回正确的记录
Posted
技术标签:
【中文标题】Laravel - whereHas 查询没有返回正确的记录【英文标题】:Laravel - whereHas query not returning correct records 【发布时间】:2021-06-10 13:13:23 【问题描述】:我目前正在编写搜索查询,但在将 where
与 whereHas
连接时遇到问题
如果我只想搜索类别..
如果我只是单独搜索类别,则以下查询有效
$goals = $myGoals
->whereHas('categories', function ($q) use ($search)
$q->where('name', 'like', "%$search%");
)->paginate(10);
如果我只想搜索标题..
如果我想单独搜索目标标题,同上
$goals = $myGoals->where('title', 'like', "%$search%" )->paginate(10);
如果我想单独搜索这两个查询,它们都可以工作。
查询尝试
下面是我编写的查询,允许用户搜索目标的title
和category
的name
。
$myGoals = $team->goals();
$goals = $myGoals
->whereHas('categories', function ($q) use ($search)
$q->where('name', 'like', "%$search%");
)->where('title', 'like', "%$search%" )->paginate(10);
我已经尝试了上述查询,但是当我输入输入时搜索结果返回空。我还尝试将where()
交换为orWhere()
,然后返回一个不属于$team
模型实例的目标,但它是链接到枢轴内不同Team
模型id
的目标记录表。
谁能发现我哪里出错了?谢谢
【问题讨论】:
【参考方案1】:你需要在 where 里面全部使用它。
$goals = $myGoals->where(function ($query) use ($search)
return $query->whereHas('categories', function ($q) use ($search)
$q->where('name', 'like', "%$search%");
)->orWhere('title', 'like', "%$search%" );
)->paginate(10);
【讨论】:
这很有魅力!多谢,伙计。你能解释一下为什么顶部需要一个 where() 吗? 因为 orWhere() 会干扰同级别的其他条件。这就是我们将其移至另一个条件级别的原因。所以它只适用于 whereHas('categories') 条件.... 有道理,谢谢解释以上是关于Laravel - whereHas 查询没有返回正确的记录的主要内容,如果未能解决你的问题,请参考以下文章
查询: 在邮递员的 whereHas 处返回,但表中有数据。拉拉维尔
Php 变量未传递到 whereHas 函数 - Laravel Eloquent
laravel Eloquent 查询 WhereHas 结果错误
优化 Laravel Eloquent whereHas() 查询 - 非常慢