-
-
Notifications
You must be signed in to change notification settings - Fork 374
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SQL Error on Roles Sync or Attach #126
Comments
You're probably missing some configuration. What is the stack trace of this exception? |
If it happens in the command line, you can find the stack trace in |
and
|
It looks like you're using Laratrust 3.1 but have database structure for 3.2. I'm not really familiar with the newest changes regarding Morph relationships. @santigarcor, can you look into it? |
Here's some relevant output from composer.
|
I also downloaded the 3.2 release directly from Github and compared that to the files in my vendor directory and found them to be identical. |
It looks like the dd(get_class(\App\User::first()->roles())); to get the relationship type? Are your relationship definitions the defaults provided with Laratrust or did you redefine it somewhere? |
It's weird because it's calling the belongs to many relationship, but i replaced it with the morph. I'm with you @KKSzymanowski, @TeejMonster you are using the 3,1 version of laratrust because in version 3,2 that relationship is not used in the user trait for roles relationship. Or at least you are using 3,1 user trait |
I'm not sure that's the case, the call stack looks the same in my setup. The reason is, class Base {
public function foo()
{
throw new Exception();
}
}
class Derived extends Base {} and call
|
Hmm so the only thing i can think of, is that he redefined the relationship. @TeejMonster could you please show how does your user model looks like? |
I added a breakpoint to vendor\laravel\framework\src\Illuminate\Database\Eloquent\Relations\MorphToMany.php on line 92 as follows: protected function baseAttachRecord($id, $timed)
{
dd('here'); // Breakpoint
return Arr::add(
parent::baseAttachRecord($id, $timed), $this->morphType, $this->morphClass
);
} When changing user roles, this dd does not seem to be triggered and the SQL error is still thrown. Here is app\User.php: namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laratrust\Traits\LaratrustUserTrait;
class User extends Authenticatable
{
use LaratrustUserTrait;
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
'note',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
public function roles()
{
return $this->belongsToMany('App\Role');
}
public function permissions()
{
return $this->belongsToMany('App\Permission');
}
public function getRoleListAttribute()
{
return $this->roles->pluck('id')->toArray();
}
} |
There is the problem, you overwrited the relationships, delete the
relationships definition from your user model.
2017-04-12 21:35 GMT+02:00 TeejMonster <notifications@github.com>:
… I added a breakpoint to
*vendor\laravel\framework\src\Illuminate\Database\Eloquent\Relations\MorphToMany.php*
on line 92 as follows:
protected function baseAttachRecord($id, $timed) { dd('here'); // Breakpoint return Arr::add( parent::baseAttachRecord($id, $timed), $this->morphType, $this->morphClass ); }
When changing user roles, this dd does not seem to be triggered and the
SQL error is still thrown.
Here is *app\User.php*:
namespace App;use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;use Laratrust\Traits\LaratrustUserTrait;class User extends Authenticatable{ use LaratrustUserTrait; use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'note', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function roles() { return $this->belongsToMany('App\Role'); } public function permissions() { return $this->belongsToMany('App\Permission'); } public function getRoleListAttribute() { return $this->roles->pluck('id')->toArray(); }}
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#126 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AHNwaZM0G3DN7KnweUiEmciBtjT5mIg3ks5rvSd3gaJpZM4M68-g>
.
|
Overeager coding on my part, then. I have removed the offending definitions and everything is working now. Thank you both for your help and for the work that you put into this project. |
I get the following error when syncing or attaching roles:
SQLSTATE[HY000]: General error: 1364 Field 'user_type' doesn't have a default value (SQL: insert into `role_user` (`role_id`, `user_id`) values (2, 68))
I modified my laratrust_setup_tables.php migration file, changing line 27 from
$table->string('user_type');
to
$table->string('user_type')->default('App\User');
as well as changing line 61 from
$table->string('user_type');
to
$table->string('user_type')->default('App\User');
Did I miss something during setup?
The text was updated successfully, but these errors were encountered: