Люмен / Ларавел много-ко-многим (выборка данных в середине) - PullRequest
0 голосов
/ 14 ноября 2018

Я тестирую Люмен здесь, и у меня есть вопрос, касающийся отношений «многие ко многим».

Я прочитал документацию, но я либо проигнорировал ответ, либо, может быть, я тупее, чем мне кажется. Также нужно добавить, что я новичок в паттерне MVC.

Итак, у меня есть пример, где у нас может быть много разрешений, много пользователей, и у каждого пользователя может быть много разрешений.

У меня есть 3 таблицы базы данных:

-------------------------------------
| users | id | firstname | lastname |
-------------------------------------

----------------------------------------------------------------
| permissions_users | id | permission_id | user_id | from | to |
----------------------------------------------------------------

----------------------------------
| permissions | id | name | desc |
----------------------------------

А пока я создал 2 модели:

Пользователь:

public function permissions(){
    return $this->belongsToMany('App\Permission', 'permissions_users', 'user_id', 'permission_id');
}

Разрешение:

public function users(){
    return $this->belongsToMany('App\User', 'permissions_users', 'permission_id', 'user_id');
}

Теперь мой вопрос: что делать, если я хочу получить даты "от" и "до" в таблице permissions_users?

Создать ли модель с именем PermissionUser «между», выступающую в качестве посредника между пользователем и разрешением, или есть другой способ?

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018
public function permissions()
{
    return $this
        ->belongsToMany('App\Permission', 'permissions_users', 'user_id', 'permission_id')
        ->withPivot('from', 'to');
}

foreach($user->permissions as $permission){
    $permission->pivot->from;
    $permission->pivot->to;
}
0 голосов
/ 14 ноября 2018

Вы можете определить эти атрибуты также в зависимости от выбора.Я думаю, что это сработает для вас.

public function permissions()
{
    return $this->belongsToMany('App\Permission', 'permissions_users', 'user_id', 'permission_id')->select(['from', 'to']);
}

Возможно, вам также понадобится добавить столбцы разрешений в select, иначе он может отображаться только в и из вашего объекта отношения.

...