Присоединяйся к столам и получай от многих ко многим (Laravel) - PullRequest
0 голосов
/ 22 января 2019

Таблица пользователей

    |---------------------|------------------|
    |          id         |     email        |
    |---------------------|------------------|
    |     3               |   18             |
    |---------------------|------------------|

Почтовый стол

    |---------------------|------------------|
    |     id              |     Title        |
    |---------------------|------------------|
    |     12              |   My Post        |
    |---------------------|------------------|

Таблица категорий

    |---------------------|------------------|
    |     id              |     Title        |
    |---------------------|------------------|
    |     18              |   My Category    |
    |---------------------|------------------|

Категория-сообщение

    |---------------------|------------------|
    |     post_id         |     category_id  |
    |---------------------|------------------|
    |     12              |   18             |
    |---------------------|------------------|

Пользователь Категория

    |---------------------|------------------|
    |     user_id         |     category_id  |
    |---------------------|------------------|
    |     3               |   18             |
    |---------------------|------------------|

В этой структуре таблицы я хочу получить все сообщения с любым заданным идентификатором пользователя в соответствии с их любимой категорией одним запросом.

Я определил отношения для всех моделей

Категория:

public function posts(){

     $this->belongsToMany(Post::class,'category-post','category_id','post_id')
}

Сообщение:

public function categories(){

     $this->belongsToMany(Category::class,'category-post','post_id','category_id')
}

Пользователь:

public function favCategories(){
         $this->belongsToMany(Category::class,'user-category-','user_id','category_id')
    }

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вот один красноречивый запрос:

<?php
dd($posts = User::find(3) //user id 3
->categories()->where('id', 18) //favorite category id 18
->posts);
0 голосов
/ 22 января 2019

Можете попробовать это с вашей моделью отношений

$data = User::with("favCategories.categories.posts")->find($user_id);

// "favCategories" получить в первую очередь любимые категории

// "Categories" получить все категории

// "записи" получают все сообщения с этими категориями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...