Laravel, как объединить все записи из таблицы соединений - PullRequest
0 голосов
/ 30 мая 2018

В приведенном ниже запросе я пытаюсь получить записи из таблицы 'posts' со связанными записями из 2 других таблиц: 'polls' и 'comments'.

Но результаты запроса повторяют 1 'post' столько же, сколькораз «комментарии» принадлежат «посту».

Например.Если у меня есть сообщение с id = 15 и к этому сообщению принадлежат 5 комментариев, то в результате у меня будет 5 раз сообщение с идентификатором = 15 с одним другим комментарием.

Как написать запрос, чтобы иметь только 1 уникальное сообщение свсе комментарии в разделе «комментарии»?

DB::table('posts')
        ->join('polls', 'posts.id', '=', 'polls.post_id')
        ->join('comments','posts.id','=', 'comments.post_id')
        ->whereMonth('posts.created_at','=',date('m',strtotime("01-04-2018")))
        ->orderBy('polls.yes', 'desc')->get();

Спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Вы должны использовать модели и отношения:

class Post extends Model {
    public function poll() {
        return $this->hasOne(Poll:class);
    }
}

class Poll extends Model {
    public function comments() {
        return $this->hasMany(Comment:class);
    }
}

class Comment extends Model {}

$posts = Post::whereMonth('created_at', '=', date('m', strtotime("01-04-2018")))
    ->with('poll.comments')
    ->get()
    ->sortByDesc('poll.yes');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...