Один пост, принадлежащий многим предприятиям - PullRequest
0 голосов
/ 29 июня 2018

У меня есть база данных со структурой, аналогичной приведенной ниже (извиняюсь, если диаграмма не полностью ясна).

DB diagram

Статистика, favourite_likes и category_links имеют полиморфную связь с таблицей сообщений. В компании может быть много сообщений, а в сообщении может быть много дат.

Сообщение будет отображаться в веб-интерфейсе сайта только в том случае, если в таблице дат публикации будет указана дата.

Проблема в том, что мне нужно изменить этот дизайн так, чтобы можно было связать один пост со многими предприятиями, это кажется довольно простым, однако есть много проблем:

  • Каждый пост и бизнес имеют пространственный столбец с координатами, этот столбец используется для ближайшего поиска в веб-интерфейсе. Столбец координат является необязательным для пользователя в бэкэнде, если он ничего не вводит, система просто скопирует координаты из бизнеса. Поэтому, если у меня есть сообщение, связанное со многими предприятиями, в нем нужно будет хранить более одного набора координат.

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

Наша БД очень сложная, и мне нужен метод, позволяющий сообщению связывать многие компании, который прост и больше не сильно усложняет ситуацию. Система построена в Laravel, поэтому Eloquent упрощает установление отношений.

Некоторая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете определить отношение ManyToMany между постом и бизнесом, переместив столбец шнуров из таблицы постов в сводную таблицу, чтобы у вас было cords для каждого отношения post и business.

Почтовая модель

public function businesses(){
    return $this->belongsToMany(Business::class, 'business_post')->withPivot('cords');
}

public function statistic(){
    return $this->hasOne(Statistic::class);
}

public function dates(){
    return $this->hasMany(PostDate::class);
}

сводная таблица business_post (id, post_id, business_id, cords)

Бизнес-модель

public function posts(){
    return $this->belongsToMany(Post::class, 'business_post')->withPivot('cords');
}

Получить данные

$posts = Post::with('businesses','statistic','dates')->get();

Аналогично вы можете определить для других моделей

Подробности https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

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