2017-11-07 19 views
0

パート1 PostgreSQLではJSONのCOLを更新した問題:メインの質問Laravel雄弁

colours_tabテーブル(PostgreSQLの9.6)には、私は列がタイプJSONBのcolours_json_colと呼ばれています。 私は前述のテーブルに新しいレコードを作成し、私のLaravelコントローラに次のコードを持っている:

$colour_rec = new ColoursModel(); 
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ]; 
$colour_rec -> update (['colours_json_col->fruits->apple' => 'green']); 
$colour_rec -> saveOrFail(); 

上記のコードは、エラーまたは投げる例外を、まだ私の中でそれを新しいレコードを実行した後はありませんデータベースには、次のJSONデータが含まれています。

{"fruits": {"apple": "pink"}} 

明らかに、私が欲しいのは、リンゴがピンクではなく緑であることです。ここの文書(https://laravel.com/docs/5.5/queries#updates)は、私が正しいものを「緑色」に設定することを示唆しています。誰かが私が間違っているのを見ることができますか?

パート2:ボーナス質問

erroringから上記のコードを防止するために、私はモデルに$fillableとして列colours_json_colを宣言しなければならなかった:

protected $fillable = ['colours_json_col']; 

私にはありません可能であれば、実際には列を$fillableと設定したいと考えています。したがって、update()関数を呼び出さなくても値を更新する方法はありますか? 1での質問の両方の部分に答える

答えて

0

$colour_rec = new ColoursModel(); 
$colour_rec -> colours_json_col = ['fruits' => ['apple' => 'pink'] ]; 
$colour_rec -> setAttribute ('colours_json_col->fruits->apple', 'green'); 
$colour_rec -> saveOrFail(); 

を私の知る限り、雄弁で文書化されていない機能のようです。