Laravel Eloquent默认情况下未获取属性集

时间:2016-07-10 22:06:45

标签: php laravel laravel-5 eloquent laravel-5.2

我的Eloquent迁移包含列的默认值,并且在创建模型时确实在数据库中设置了默认值。但是,Eloquent似乎不知道这个值并返回null。

迁移:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
       $table->increments('id');
       $table->string('name');
       $table->string('email')->unique();
       $table->string('password');
       $table->integer('role')->default(0);
       $table->rememberToken();
       $table->timestamps();
    });
}

在数据库中,role的值确实为0,但在调用$user->getAttributes()时,role列甚至不存在(可能因为某种方式将值设置为null)。

我缺少什么让这项工作?如何正确设置实际可用的默认值?

2 个答案:

答案 0 :(得分:0)

我只能猜测,但我认为您还为role模型创建了User关系,这就是您获得null的原因。你永远不应该为列和关系使用相同的名称,如果任何字段实际上是其他表的外键,你应该为这个表的主键添加sufix,所以例如在这里建议使用:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
       $table->increments('id');
       $table->string('name');
       $table->string('email')->unique();
       $table->string('password');
       $table->unsignedInterger('role_id')->nullable()->default(null);
       $table->rememberToken();
       $table->timestamps();
    });
}

如上所示,可以对此列类型进行一些额外的更改。

答案 1 :(得分:0)

如果您使用的是默认的Laravel用户迁移和模型,请在用户模型中将“角色”列添加为可分配的质量

protected $fillable = ['name', 'email', 'password', 'role'];