1

Part 1: Main Question

On my colours_tab table (PostgreSQL 9.6), I have a column called colours_json_col of type JSONB. I have the following code in my Laravel controller which creates a new record on the afore-mentioned table:

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

The above code doesn't error or throw an exception, yet after executing it the new record in my database contains the following JSON data:

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

Obviously, what I want is for the apple to be green, not pink! The documentation here (https://laravel.com/docs/5.5/queries#updates) suggests that I'm doing the right thing in order set it 'green'. Can anyone see what I'm doing wrong?

Part 2: Bonus Question

In order to prevent the above code from erroring, I have had to declare the column colours_json_col as $fillable in the model:

protected $fillable = ['colours_json_col'];

I don't really want to set the column as $fillable if at all possible. Therefore, is there a way to update the value without having to call the update() function?

1 Answer 1

1

Answering both parts of the question in one:

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

It seems to be an undocumented feature in Eloquent, as far as I can tell.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.