在laravel 5.3中创建新记录时的非法偏移类型


Illegal offset type while creating new record in laravel 5.3

我正在尝试使用播种机创建新记录。

这是我在种子文件上写的代码:

RoleUser::create(['role_id'=>$roleId[0],'user_id'=>$user->id]);
PermissionRole::create(['permission_id'=>1,'role_id'=>$roleId[0]]);

这是我得到的错误

[ErrorException] Illegal offset type 
RoleUser模型用于role_user
Schema::create('role_user', function (Blueprint $table) {
        $table->integer('role_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->primary(['role_id','user_id']);
    });
PermissionRole模型用于permission_role
Schema::create('permission_role', function (Blueprint $table) {
        $table->integer('permission_id')->unsigned();
        $table->integer('role_id')->unsigned();
        $table->primary(['permission_id','role_id']);
    });

RoleUserModel有如下代码:

    class RoleUser extends Model
{
    protected $table='role_user';
    protected $primaryKey=['role_id','user_id'];
    protected $fillable=['role_id','user_id'];
    public $timestamps=false;
}

终于想通了。出现问题是因为我在RoleUser模型中使用了以下代码:

protected $primaryKey=['role_id','user_id'];

删除这一行,现在它工作良好。

当试图使用对象或数组作为索引键访问数组索引时,会发生非法偏移类型错误。

可能错误应该是你如何得到$roleId$user

您必须确保$roleId$user包含您想要的内容,并且您正在正确访问它。