2015-08-18 4 views
3

У меня есть 3 стола: Пользователи, языки и уровни.Laravel 5.1 - сводная таблица между тремя столами, лучший вариант?

Один пользователь имеет много языков и уровень.

Пример:

  • Jorge говоря: английский язык продвинутый, испанский базовый.
  • Питер говорит по-английски, итальянский средний, французский базовый.
  • Luis говорит: испанский передовой, английский передовой, итальянской среде.

Таблица пользователя

+----------+-------------+------+-----+---------+----------------+ 
| 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 таблицами) возможен с тремя таблицами? Как общаться с красноречивым?

ответ

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'); 
    } 
    } 

I надеюсь, что вы будете использовать этот вариант, который я использую для доступа к информации из всех трех таблиц.

использование:

$user = User::find(1); 
$user->levels->pivot->language_id; 
$user->levels->name; 
$user->languages->pivot->level_id; 
$user->languages->name; 
+0

Muchas Грэкиас амиго Анвар Сармьенто. – Alexd2

+0

De nada estamos para servir –

+0

Добавить для синхронизации Пользователь -> язык/уровень $ languages_levels = [1 => ['level_id' => 4], 2 => ['level_id' => 3]]; $ user-> languages ​​() -> sync ($ languages_levels); – Alexd2

0

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

Смежные вопросы