2017-03-07 8 views
1

私はPHP 7とMySQL 5.7を使用しています。属性フィールドは、私のテーブルのjson列として定義されています。Laravel Eloquent Json Column Updating Not Working

モデルファイルにキャストを定義しました。

protected $casts = ['attributes' => 'array']; 

データの追加に問題はありません。

Transaction::create([ 

      'name'   => $this->name, 
      'subject_id' => $this->id, 
      'subject_type' => get_class($this), 
      'attributes' => ['status' => 0, 'type' => 'owner'], 
      'user_id'  => $owner->id 

     ]); 

しかし、私はjsonデータを更新できません。

$transaction = $this->transaction->where('content_key', $this->request->key)->first(); $transaction->update(['attributes->status' => 1]); 

または

$transaction->attributes['status'] = 1; $transaction->save(); 

なしの仕事:私は、これらの方法を試してみました。

これらのメソッドは動作します:

$transaction->update(['attributes'=> ['status' => 1, 'type' => 'owner'] ]); 

(私はこの方法ですべてのデータを更新する必要があります)

または

Db::table('transactions')->where('content_key', $this->request->key)->update(['attributes->status' => '1']) 

を私は雄弁でこれを行うことができますどのように?

+0

$ transaction-> status = ['status' => 0、 'type' => 'owner']を試しましたか? $ transaction-> save(); ? – Muthu17

+0

私は全く同じ問題を抱えています。私はPostgreSQLデータベースを使用していますが、原則は同じです。なぜそれがうまくいかないのか、本当に欲求不満です。あなたは解決策を見つけましたか? – cartbeforehorse

答えて

1

あなたと同じ問題を経験したので、私はボンネットの下で何が起こっていたのか理解するために1日かかりました。サイズ:

$transaction->setAttribute ('attributes->status, 1); 

私に聞いてみると、Laravelのドキュメントには、この件に関する詳細がまったく不足しています。 (しかし、それはLaravelの標準的な機能だと思います)。