【发布时间】:2021-12-03 07:36:37
【问题描述】:
我一直在寻找和寻找,我找不到这个问题的答案。我需要查询我将有动态数量的OR 子句。 documentation 似乎表明可以将一系列条件传递给 where 或 orWhere,但是当我尝试这样做时,我最终没有结果。
我需要做的查询看起来像这样:
SELECT * FROM tags WHERE name = $name1 OR name = $name2 ... OR name = $nameN;
我创建了一个条件数组并将它们传递给orWhere,如下所示:
// a user's tags for which all corresponding questions are queried
$user = User::with('tags')-where('id', Auth::user()->id)-get();
// an array of conditions formatted like the docs specify
$conditions = $user->tags->map(function ($item) {
return ['name', '=', $item->name];
})->all();
/*
outputs a plain array like this:
[
["name", "=", "php"],
["name", "=", "mysql"],
["name", "=", "laravel"],
]
*/
$tags = Tag::with([
'questions.answers',
'questions.user.answers',
'questions.tags'
])
->orWhere($conditions)
->get();
结果应该是与用户标签匹配的标签集合,以及他们的相关问题。但相反,我什么也没得到。我已经尝试以多种不同的方式重新编写此查询,并且也没有急切地加载相关数据,但没有任何区别。如果我在orWhere 子句之前添加where 子句,则查询仅返回由where 子句过滤的数据。
我对此束手无策。我想出了一个解决方法,但它很复杂而且真的不理想。我应该能够只使用带有一系列条件的简单orWhere,而不是诉诸复杂的黑客攻击。谁能指出我做错了什么和/或我如何才能达到我想要得到的结果?提前致谢。
【问题讨论】:
标签: php mysql laravel eloquent laravel-8