[英]Laravel 5.6 - Can't Update Enum Value
我在数据库中有一个枚举类型的字段,它使我可以知道用户是否已激活他的帐户。
这是相应的迁移:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->enum("activated", [0,1])->default(0);
$table->enum("role", [0,1,2,3,4])->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['activated', "role"]);
});
}
现在,如果我尝试更新该字段的值,则该值不会更改并且不会发生错误。
$user = User::find(2);
$user->activated = 1;
$user->save();
我注意到在我的模型用户中,所有字段都可以填写:
在应用\\用户中
protected $guarded = [];
有人有主意吗?
正如ceejayoz所说:您应该有其他表user_roles
来映射用户和角色之间的多对多关系。
这就是为什么您的价值没有更新的原因。
如果将数字存储到ENUM列中,则该数字将视为可能值的索引,并且存储的值是具有该索引的枚举成员。 (但是,这不适用于将所有输入视为字符串的LOAD DATA。)如果用数字引号,但如果枚举值列表中没有匹配的字符串,则仍将其解释为索引。 由于这些原因,不建议使用枚举值定义为数字的ENUM列,因为这很容易造成混淆。 例如,以下列具有枚举成员,其字符串值为“ 0”,“ 1”和“ 2”,但数字索引值为1、2和3:
当您存储数值时,会将其视为索引而不是值。 要将其作为值使用,应使用引号"
将其设为值而不是索引。
这里
$table->enum("activated", [0,1])->default(0);
// it stores value `0` in index `1` and value `1` in index `2`
当你做
$user->activated = 1;
// `1` which is number treated as index whose value is `0`
// to tread `1` as `1` you need to pass it with quotes `'1'` or `"1"`
这意味着它将在0
到0
覆盖您的值,因为1
在存储时变为0
,而2
将为1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.