Laravel: запрос моделей, где отношения больше 0 - PullRequest
0 голосов
/ 18 апреля 2019

Я делаю запрос Laravel, чтобы запросить список элементов, у которых его отношение больше 0.

Концерты в таблице:

| ID |    NAME   |
|----|-----------|
| 1  | Concert A |
| 2  | Concert B |
| 3  | Concert C |

И таблица Position.

| ID |  concert_id    |   user_id  | Content  |
|----|----------------|------------|----------|
| 1  |       1        |      1     |    xxx   |
| 2  |       1        |      2     |    yyy   |
| 3  |       3        |      1     |    zzz   |
| 4  |       3        |      2     |    www   |
| 5  |       1        |      3     |    xyx   |
| 6  |       3        |      3     |    rer   |

Запрос, который мне нужно сделать, - получить концерты, в которых их позиция в контенте имеет значение типа $some_query$.

Код, который я имею в виду:

$result = $this->model->whereHas('positions')
    ->with(['positions' => function ($query) {
        $query->where('content', 'like', "%{$content}%");
    }])->get();

Но, насколько я могу судить, это принесет все концерты, а также только те позиции, которые имеют желаемое содержание.

Так что у меня две проблемыВо-первых, мне нужно получить концерты, в которых его запрашиваемые позиции больше 0. А во-вторых, мне также нужно собрать все позиции, не только запрашиваемые.По сути, запрос - это просто способ узнать, какие концерты мне нужно принести.

Можно ли добиться этого за один запрос?

1 Ответ

0 голосов
/ 18 апреля 2019

Вам нужно будет переместить ваш запрос на whereHas.

Если я правильно понял, это то, что вы хотите:

$result = $this->model
    // Take the Concerts that has positions with a similar content
    ->whereHas('positions', function ($query) use ($content) {
        $query->where('content', 'like', "%{$content}%");
    })
    // Take (all) the Positions of these concerts
    ->with('positions')
    ->get();
...