Laravel — получение коллекций через две сводные таблицы

В настоящее время я борюсь со следующей проблемой в Laravel 5.6, скажем, у меня есть следующие таблицы базы данных:

  1. Веб-сайты (например, id | name)
  2. Website_providers (например, id | website_id | provider_id)
  3. Провайдеры_постов (например, id | provider_id | post_id | post_name)
  4. Сообщения (например, id | name)

Я ищу хороший способ получить сообщения на основе идентификатора веб-сайта. Веб-сайту может быть назначено несколько провайдеров (через website_providers), а провайдерам может быть назначено несколько постов (также они могут предоставить свое собственное post_name, которое должно отменять стандартное posts.name).

Каков наилучший способ достичь этого в Laravel? Я еще пытался сделать это через отношения, но не могу заставить это работать слишком гладко. Я также попытался загрузить сообщения с помощью довольно длинного запроса на соединение, но он просто не выглядит правильным, должен быть более простой и красивый способ.

Заранее спасибо!

0

Решение

Для этого случая нет родных отношений.

Я создал HasManyThrough отношения с поддержкой BelongsToMany: Репозиторий на GitHub

После установки вы можете использовать его так:

class Website extends Model {
use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

public function posts() {
return $this->hasManyDeep(
Post::class,
['website_providers', Provider::class, 'provider_posts']
)->withPivot('provider_posts', ['post_name']);
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]