Я хочу перечислить все записи, по крайней мере, по одному тегу в каждой выбранной категории. В нашем приложении laravel у нас есть модель Post and Tag.
В модели Post у нас есть:
public function tags()
{
return $this->belongsToMany(Tag::class, 'post_tags', 'post_id', 'tag_id');
}
Что такое запрос для выбора записи, по крайней мере, один из {3,2} тегов ипо крайней мере один из {8,10}?
Я пишу этот код:
$tags = ['news' => [3,2], 'alert' => [8,10]];
Post::whereHas('tags', function($query) use ($tags){
foreach($tags as $category => $tag){
$query->whereIn('tags.id', $tag);
}
}
сообщений
+---------+---------------+
| id | title |
+---------+---------------+
| 1 | post 1... |
| 2 | post 2... |
| 3 | post 3... |
| 4 | post 4... |
| 5 | post 5... |
| 6 | post 6... |
| 7 | post 7... |
| 8 | post 8... |
| 9 | post 9... |
+---------+---------------+
тегов
+---------+-------+------------+
| id | name | category |
+---------+-------+------------+
| 1 | stock | news |
| 2 | acc | news |
| 3 | etc | news |
| 4 | eco | news |
| 5 | side | ads |
| 6 | head | ads |
| 7 | footer| ads |
| 8 | info | alert |
| 9 | danger| alert |
| 10 |success| alert |
+---------+-------+------------+
post_tags
+-----------+---------+
| post_is | tag_id |
+-----------+---------+
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 8 |
| 1 | 9 |
| 1 | 10 |
| 9 | 9 |
| 9 | 6 |
| 3 | 7 |
| 7 | 1 |
| 7 | 2 |
| 7 | 8 |
+-----------+---------+
Но результат - ничто.
Мне нужен результат, так как Post Eloquent и производительность запросов важны.
Версия larave - 5.8.35