#php #laravel
#php #laravel
Вопрос:
Я исследую отношения laravel, но я вижу их только между 2 таблицами… Мне интересно, существует ли такая вещь, как «один к одному», которая работает с 3 таблицами?
Например, у меня есть следующие таблицы
websites
preferences
websites_preferences
У одного веб-сайта есть одни настройки, но через таблицу websites_preferences связь находится там.
Любая помощь была бы отличной.
Приветствия,
Комментарии:
1. Для меня это выглядит как отношение многие ко многим .
2. В one to one вам не требуется таблица websites_preferences.
Ответ №1:
Вам не нужна таблица websites_preferences, если вам нужны только отношения «один к одному».
Но вы можете сделать это -> Имеет много сквозных отношений:
class Website extends Model
{
public function preferences()
{
return $this->hasManyThrough('AppPreferences', 'AppWebsite_preferences');
}
}
Источник:https://laravel.com/docs/5.3/eloquent-relationships#has-many-through
Комментарии:
1. Похоже, это то, что мне нужно… Будет ли это связывать конкретные предпочтения с веб-сайтом через таблицу website_preferences? … Будет ли это лучшим способом приблизиться к структуре таблицы
Ответ №2:
Нет необходимости использовать промежуточную таблицу для взаимно однозначных отношений.
Если вы хотите использовать отношения «Многие ко многим» между веб-сайтами и настройками, вы можете поступить следующим образом.
Для этого вам нужна промежуточная таблица ‘website_preferences’
class Website extends Model
{
public function preferences()
{
return $this->belongsToMany('AppPreference', 'website_preferences', 'website_id', 'preference_id');
}
}
class Preference extends Model
{
public function websites()
{
return $this->belongsToMany('AppWebsite', 'website_preferences', 'preference_id', 'website_id');
}
}
Обратитесь к этой ссылке, это может быть полезно
https://laravel.com/docs/5.3/eloquent-relationships#many-to-many
Ответ №3:
На самом деле вам не нужна третья таблица для взаимно однозначных отношений. Третья таблица предназначена для «многие ко многим». Вы можете использовать primary key
of preferences
table в качестве внешнего ключа websites
таблицы.