2015-08-31 2 views
1

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

У меня есть следующие таблицы:

пользователей

Таблица users содержит список пользователей.

users_roles

users_roles таблица представляет собой сводную таблицу, которая связывает roles с users.

роли

roles таблица содержит список ролей.

Я пытаюсь использовать настройку репозитория, чтобы мой контроллер не упоминал о красноречиве.

Это мой контроллер:

class ContractorController extends Controller 
{ 
    private $user; 

    /** 
    * Create a new instance. 
    * 
    * @return Middleware 
    */ 
    public function __construct(UserRepoInterface $user, TimesheetRepoInterface $timesheet) 
    { 
     $this->middleware('actions'); 

     $this->user = $user; 
     $this->timesheet = $timesheet; 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @param Request $request 
    * @return Response 
    */ 
    public function store(CreateUserRequest $request) 
    { 
     // create user 
     $user = $this->user->createUser($request->except('_token')); 

     // user was created above so we can use $user object 
     $this->user->createUserRole($user); 

     return Redirect::back()->withMessage('New user created.'); 
    } 
} 

Мой репозиторий:

/** 
* Create new user role. 
* 
* @param $request 
* @return mixed 
*/ 
public function createUserRole($user) 
{ 
    return $this->user->roles()->attach($user); 
} 

Моя модель Пользователь:

/** 
* Get the roles associated with the user. 
* 
* @return Object 
*/ 
public function roles() 
{ 
    return $this->belongsToMany('App\Models\User\UsersRoles', 'users_roles', 'role_id', 'user_id'); 
} 

Приведенные выше результаты кода в записи получение создан в users_roles таблице что правильно, однако я не знаю, как связать правильную роль_id i в таблице.

Вот данные, которые получает вставлены в users_roles:.

id user_id role_id 
1  1   0 

Как вы можете видеть, что нет role_id, потому что я не знаю, как я могу передать это я знаю, что если бы я был phsically создания новую роль в таблице roles, то я могу использовать этот объект. Но роль уже существует, поэтому мне просто нужно связать этого нового пользователя с той ролью, которую я указываю.

Возможно, кто-то может указать мне, как я могу это сделать или как мне настроить свой код?

Заранее спасибо.

+1

Ваша сводная таблица 'users_roles' должна быть сингулярной и алфавитной. например 'Role_user'. –

+0

Да, но я уже указываю имя таблицы в методе 'ownToMany'. Кроме того, я использую метод 'attach()', см. Выше код. – V4n1ll4

ответ

1

Вы должны быть прохождение ролей массива не массив

$this->user->createUserRole($user); 

пользователя вместо этого он должен быть роли, которые вы хотите прикрепить с пользователем

$this->user->createUserRole($roles);//$roles array 
+0

Хорошо, но если я это сделаю, то user_id пуст в таблице users_roles – V4n1ll4

+0

Как я могу добавить user_id? – V4n1ll4

+0

У вас есть ** отношения 'role' ** в вашей модели пользователя, поэтому, когда вы применяете **' createUserRole' **, он будет задерживать user_id от модели. –

0

Для тех, кто хочет сделать то же самое , Мне, наконец, удалось заставить его работать, отправив user_id, а также role_id в мой репозиторий следующим образом:

$this->user->createUserRole($this->role->findRoleByName('Contractor')->id, $user->id); 

Тогда в моем хранилище я сделал следующее:

/** 
* Create new user role. 
* 
* @param $role 
* @param $user 
* @return mixed 
*/ 
public function createUserRole($role, $user) 
{ 
    return $this->user->roles()->attach($role, ['user_id' => $user]); 
} 

Это добавляет role_id, а также user_id к users_roles таблице.

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