Laravel - whereHas and whereHas



我需要得到的帖子,其中的帖子有tag1和tag2(或更多)

我试过了:

$posts = Post::whereHas('tags', function(Builder $query) {
foreach (request('tags') as $tag) { // request('tags') = integer array
$query->where('id', $tag);
}
})->get();

但是行不通。

如果你真的想要得到tag1AND标签2你可以做下面的代码

$posts = Post::query();
foreach (request('tags') as $tag) { // request('tags') = integer array
$posts = $posts->whereHas('tags', function(Builder $query) use ($tag) {
$query->where('id', $tag);
});
}
$posts = $posts->get();

但是如果你想要得到的帖子有tag1标签2 .

您可以使用whereIn方法:

$posts = Post::whereHas('tags', function(Builder $query) {
$query->whereIn('id', request('tags'));
})->get();

或替代使用orWhere

$posts = Post::whereHas('tags', function(Builder $query) {
foreach (request('tags') as $tag) { // request('tags') = integer array
$query->orWhere('id', $tag);
}
})->get();

最新更新