새 사용자를 저장하고 syncing
많은 관계를 새로 만들면 새로 만든 사용자의 ID가 sync()
메서드로 전달되지 않는 것 같이 무결성 제약 조건 오류가 발생합니다. 여기 내 store
컨트롤러 방법 :많은 관계를 저장할 때 Laravel 무결성 제약 조건 위반
$user = new User;
$user->name = Input::get('name');
$user->username = Input::get('username');
$user->email = Input::get('email');
$user->password = Input::get('password');
$user->save();
// See if roles are passed, if not assign the default role of "view_site"
$roles = Input::has('roles') ? Input::get('roles') : [3];
$user->roles()->sync($roles);
당신은 내가 그것이 ID가 있어야하므로 sync
에 관련 데이터를 시도하기 전에 save()
를 호출 볼 수 있듯이. 나는 그것이 잘 작동 이미 존재하는 사용자 (User::find($id)->roles()->sync([1,2,3])
)에 동기화 방법을 실행하는 경우
Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into
users_roles
(role_id
,user_id
) values (3,))
다음은 오류입니다. 참고로
, 관계 :
// User.php
public function roles()
{
return $this->belongsToMany('Role', 'users_roles');
}
// Role.php
public function users()
{
return $this->belongsToMany('User', 'users_roles');
}
편집 : sync()
이전에
쿼리 로그. save()
같은데는
Array
(
[0] => Array
(
[query] => select * from `users` where `id` = ? limit 1
[bindings] => Array
(
[0] => 1
)
[time] => 0.63
)
[1] => Array
(
[query] => select `roles`.*, `users_roles`.`user_id` as `pivot_user_id`, `users_roles`.`role_id` as `pivot_role_id` from `roles` inner join `users_roles` on `roles`.`id` = `users_roles`.`role_id` where `users_roles`.`user_id` = ?
[bindings] => Array
(
[0] => 1
)
[time] => 0.58
)
[2] => Array
(
[query] => select count(*) as aggregate from `users` where `email` = ? or `username` = ?
[bindings] => Array
(
[0] => [email protected]le.com
[1] => example
)
[time] => 0.48
)
)
을 사용할 수 있습니다
당신의
store
방법에서 ,if
문을 추가) -> roles() -> sync ($ roles);'같은 오류가 발생합니까? – Razor아니요, 완벽하게 작동합니다 – harryg
아마도'Ardent' (저장시 자동 유효성 검사)를 사용하고있을 것이므로'$ user-> save();을 호출하면 아무 일도 일어나지 않습니다. 어떤 식 으로든, 마지막에 var_dump ('DB :: getQueryLog()')'를 추가하고 결과를 공유하십시오. – Razor