更新json列的各个值

时间:2017-10-12 17:17:07

标签: laravel laravel-5

所以我有一个像这样的用户结构:

    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('username');
        $table->text('phone');
        $table->string('address');
        $table->string('city');
        $table->string('state');
        $table->string('country');
        $table->string('postal');
        $table->string('email')->unique();
        $table->string('password');
        $table->string('google2fa_secret');
        $table->text('balance');
        $table->rememberToken();
        $table->timestamps();
    });

现在,我将值存储在'balance'列中,如此

{
    "usd": 10,
    "gbp": 10,
    "eur": 10
}

如何编辑示例usd值,但保留数组中的其他值?

我如何获得属性:

/**
 * Get the user's balance
 *
 * @return decimal
 */
public function getBalanceAttribute()
{
    return json_decode( $this->attributes['balance'] );
}

1 个答案:

答案 0 :(得分:0)

假设您的用户希望按ID获取然后更新,那么您可以执行以下操作:

DB::table('users')
        ->where('id', 1)
        ->update(['balance->usd' => 12]);

但请确保这是json列,我的意思是您需要在迁移中定义$table->json('balance');。然后,您不需要访问者获取json_encode属性。

有关详细信息,请查看documentation部分。