Laravel 5.1 - сводная таблица между тремя таблицами, лучший вариант?

У меня есть 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;

Вы не опубликовали свои отношения, но вы можете создать отдельную модель сводной таблицы. Таким образом, вы можете определить отношения с пользовательской моделью, языковой моделью и моделью уровня в этой сводной модели.

Другие вопросы по тегам