繁体   English   中英

Laravel 5.6-无法更新枚举值

[英]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"`

这意味着它将在00覆盖您的值,因为1在存储时变为0 ,而2将为1

阅读文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM