Laravel красноречивые отношения между несколькими таблицами

#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 таблицы.