В настоящее время я борюсь со следующей проблемой в Laravel 5.6, скажем, у меня есть следующие таблицы базы данных:
Я ищу хороший способ получить сообщения на основе идентификатора веб-сайта. Веб-сайту может быть назначено несколько провайдеров (через website_providers), а провайдерам может быть назначено несколько постов (также они могут предоставить свое собственное post_name, которое должно отменять стандартное posts.name).
Каков наилучший способ достичь этого в Laravel? Я еще пытался сделать это через отношения, но не могу заставить это работать слишком гладко. Я также попытался загрузить сообщения с помощью довольно длинного запроса на соединение, но он просто не выглядит правильным, должен быть более простой и красивый способ.
Заранее спасибо!
Для этого случая нет родных отношений.
Я создал 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']);
}
}
Других решений пока нет …