У меня 3 таблицы: пользователи, языки и уровни .
У одного пользователя есть много языков и уровень.
Пример:
Пользователь таблицы
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | NO | | NULL | | | lastname | varchar(50) | NO | | NULL | | +----------+-------------+------+-----+---------+----------------+
Языки таблиц
+-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+
Уровни таблицы
+-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | NO | | NULL | | +-------+-------------+------+-----+---------+----------------+
Сводная таблица
+-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | NO | | NULL | | | language_id | int(11) | NO | | NULL | | | level_id | int(11) | NO | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +-------------+----------+------+-----+---------+----------------+
Вопрос в том, как создать сводную таблицу с тремя таблицами (в doc laravel пример только с 2 таблицами) возможен с тремя таблицами? Как общаться с красноречивым?
Ну, у меня есть что-то в проекте, использующем три таблицы и в качестве поворота, поэтому я запускаю:
Modelo User: class User extends Model{ public function levels(){ return $this->belongsToMany('App\Level','name pivot table')->withPivot('language_id'); } public function languages(){ return $this->belongsToMany('App\Language','name pivot table')->withPivot('level_id'); } }
Уровни Modelo:
class Level extends Model{ public function users(){ return $this->belongsToMany('App\User','name pivot table')->withPivot('language_id'); } public function languages(){ return $this->belongsToMany('App\Language','name pivot table')->withPivot('user_id'); } }
Язык таблицы:
class Language extends Model{ public function users(){ return $this->belongsToMany('App\User','name pivot table')->withPivot('level_id'); } public function levels(){ return $this->belongsToMany('App\Level','name pivot table')->withPivot('user_id'); } }
Я надеюсь, что вы будете использовать этот параметр, который я использую для доступа к информации из всех трех таблиц
использовать:
$user = User::find(1); $user->levels->pivot->language_id; $user->levels->name; $user->languages->pivot->level_id; $user->languages->name;
Вы не разместили свои отношения, но можете создать отдельную модель своей сводной таблицы. Таким образом, вы можете определить отношения с моделью пользователя, моделью языка и моделью уровня в этой сводной модели.