Получать посты с тегами, имеющие значение столбца не более 7 - PullRequest
0 голосов
/ 09 октября 2018

Скажем, у меня есть две сущности в отношениях "многие ко многим":

posts

-id
-title    
-body

tags

-id  
-title
-sequence (int)

post_tag

-post_id
-tag_id

Я хочу получить те Сообщения, которые имеют теги споследнее sequence значение 7.Потерпите меня.Пример будет иметь больше смысла:

post_tag:
=========
-post_id: 1
-tag_id: 3

-post_id: 1
-tag_id: 4
tags:
=====
-id: 3
-sequence: 2

-id: 4
-sequence: 7

 Post ID 1 should be returned

post_tag:
=========
-post_id: 2
-tag_id: 4

-post_id: 2
-tag_id: 5
tags:
=====
-id: 4
-sequence: 7

-id: 5
-sequence: 8

Post ID 2 should NOT be returned because it has a tag whose sequence exceeds 7.

post_tag:
=========
-post_id: 3
-tag_id: 2

-post_id: 3
-tag_id: 3

-post_id: 3
-tag_id: 4
tags:
=====
-id: 2
-sequence: 1

-id: 3
-sequence: 2

-id: 4
-sequence: 7

 Post ID 3 should be returned

Вот что я пробовал до сих пор:

$posts = Post::whereHas('tags', function($q){ $q->where('sequence', 7);})->get();

Но он возвращает дажете посты, чья последовательность выше 7. И я не жалуюсь.Я знаю, почему он возвращает сообщения с тегами, чья последовательность больше 7. Я просто не знаю, как это решить.

Подсказка: С точки зрения запроса проблему можно представить так:

Не более X и X включительно

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Что вам действительно нужно, так это проверка на равенство и меньше, чем, например:

$posts = Post::whereHas('tags', function($q) { $q->where('sequence', '<=', 7); })->get();

0 голосов
/ 09 октября 2018

Вероятно, вы ищете whereDoesntHave()

$posts = Post::whereHas('tags', function ($q) {
        $q->where('sequence', 7);
    })
    ->whereDoesntHave('tags', function($q) {
        $q->where('sequence', '>', 7);
    })->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...