belogs to many Связь между 3 объектами laravel

У меня есть 3 объекта: Категория, Сообщение и Страница. связь между категорией и публикацией принадлежит многим (и она отлично работает), а связь между страницей и категорией также принадлежит многим (она тоже отлично работает). Теперь я хочу получить сообщения всех категорий на странице. Есть ли способ установить прямую связь между страницей и публикацией? моя структура таблиц:

categories: int id string title.

posts: int id text content.

categories_posts: int id int category_id int post_id.

pages: int id string title.

pages_categories: int id int page_id int category_id.

person hussein mohammed    schedule 08.04.2020    source источник
comment
Это немного сложно, можете попробовать следующий код? class Page extends Model { public function posts() { return $this->hasManyThrough( 'App\Post', 'App\PagesCategory', 'category_id', // Foreign key on pages_categories table... 'id', // Foreign key on posts table... 'id', // Local key on pages table... 'user_id' // Local key on pages_categories table... ); } }   -  person maki10    schedule 08.04.2020
comment
Я уже пробовал это, но это не сработало.   -  person hussein mohammed    schedule 09.04.2020


Ответы (1)


Я думаю, что цепочка "присоединиться" поможет

в модели страницы:

public function posts()
{
return $this->join('pages_categories','pages_categories.page_id','=','pages.id')
->join('categories','categories.id','=','pages_categories.category_id')
->join('categories_posts','categories_posts.category_id','categories.id')
->join('posts','categories_posts.post_id','posts.id')->select('posts.*');
}
person OMR    schedule 18.04.2020
comment
Спасибо за Ваш ответ. цепочка соединений не будет медленной? - person hussein mohammed; 19.04.2020
comment
я присоединяюсь - это более быстрый способ подключить стол ... я не думаю, что есть более быстрый способ сделать это - person OMR; 19.04.2020