我的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)。
我缺少什么让这项工作?如何正确设置实际可用的默认值?
答案 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'];