Нужна помощь в построении запроса в Eloquent ORM Laravel

387
27 октября 2017, 14:18

Есть таблица постов posts (id, name), есть таблица тэгов tags (id, name).
Связаны они между собой с помощью связи "многие ко многим", через вспомогательную таблицу post_tag (id_post и id_tag).

Необходимо, зная id тэга, выбрать все связные посты.

Как правильно реализовать такую выборку помощью конструктора запросов laravel?

Answer 1

Закиньте в модель Tag связь

public function posts() { 
    return $this->belongsToMany(Post::class, 'post_tag ', 'id_post', 'id');
}

А в модель Post связь

public function tags() {
    return $this->belongsToMany(Tag::class, 'post_tag', 'id_tag', 'id');
}

Запросы для проверки:

$tags = Tag::with('posts')->get();
$posts = Post::with('tags')->get();
dump($tags);
dump($posts);
die;
Answer 2

Наверное как то так я думаю. Через join:

DB::select('select * from tags as t
            join post_tag as pt ON pt.id_tag = t.id
            join posts as p ON p.id = pt.id_post 
             where pt.id_tag= ?', [$id]);

Тут выборка идёт по tags и к ней join'нятся другие таблицы.

READ ALSO
Telegram API. Отправка сообщения с сервера

Telegram API. Отправка сообщения с сервера

Доброго дня! Подскажите плиз как с сервера передать сообщение с необходимой информацией "самому себе", реально ли это вообще или только в Боты?

397
PHP 7 - обработка ошибок

PHP 7 - обработка ошибок

Описываю класс - обработчик ошибокНекоторые его методы:

270
Весь сайт без перезагрузки на jquery

Весь сайт без перезагрузки на jquery

Какие могут быть подводные камни при создании сайта на jquery без перезагрузки страницыМенять url через js и контент через json на php

317
Не работает поиск по БД MySQL

Не работает поиск по БД MySQL

Есть база и скрипт для поиска по БД созданной в phpMyAdminПоиск не реботает

468