Как сделать запрос для получения всех объявлений с определенными тегами в Laravel?

154
22 октября 2018, 12:20

У меня есть модель объявлений Ad, модель тегов Tag и реализованная связь 'многие ко многим' между ними.

Я хочу на основе запроса пользователя выдать ему все объявления, где есть выбранные им теги.

Вот мой запрос на основе Eloquent, где я хочу получить объявления, к которым привязан тег с id = 7:

 $allAd = Ad::with(['tags' => function ($query) {
        $query->where('id', 7);
    }])->get();

Делая такой запрос я получаю абсолютно все объявления, как если бы запросил Ad::all();, включая те, где ни одного тега нет.

Что я делаю не так и как правильно составить запрос, который бы выдал только объявления с выбранными тегами?

Буду благодарен за любую помощь.

Answer 1

Нашел ответ на англоязычном stackoverflow. Необходимо применять методы whereHas и whereIn, а $tagsId должен быть массивом значений.

$allAds  = Ad::whereHas('tags', function($query) use($tagsId) {
    $query->whereIn('id', $tagsId);
})->get();
READ ALSO
Вопрос о Google Distancematrix

Вопрос о Google Distancematrix

Правильно работающий запрос стал выдавать следующее сообщение:

124
Округление в php до 3 знаков

Округление в php до 3 знаков

Как мне округлить число 0,005603 до 3-х знаков после точки к наименьшему, чтобы было значение стало 0005?

162
Как улучшить код?

Как улучшить код?

Есть сайт на битриксеМне необходимо выводить определенную надпись на некоторых страницах (их больше, чем в приведенном примере кода)

140
Как использовать redbean в ооп?

Как использовать redbean в ооп?

У меня есть код:

186