I want to update a JSON column in my database but I get this error:
Array to string conversion
I have declared the column name as array
in the model:
protected $casts = [
'destinations' => 'array'
];
this is the code that I use:
$data[] = [
'from' => $fromArray,
'to' => $toArray
];
Flight::where('id', $id)->update(['destinations' => $data]);
What should I do?
This code did the work for me.
$user = User::where('id', $request->user_id)
->first();
$array_data = ["json_key3"=>"value"];
$user->forceFill([
'db_column->json_key1->json_key2' => $array_data
])->save();
You're getting that error because you're trying to update your model using the Query Builder, which basically just creates raw SQL queries. It isn't aware of any data casting, etc defined within your model. You therefore have three choices:
1) Find your model, and run the update on your model instance.
$flight = Flight::findOrFail($id);
$flight->update(['destinations' => $data]);
2) Convert the data to a string before updating.
$data = json_encode($data);
Flight::where('id', $id)->update(['destinations' => $data]);
3) Use a database that supports JSON column queries, per @AmrAly's suggestion. Beware of this option, as not all databases support JSON columns.
According to this conversation on Github: Make json attributes fillable if Model field is fillable Taylor Otwell recommande the use of save
method:
$model->options = ['foo' => 'bar'];
$model->save();
So in you case you can do it like this:
$flight = Flight::find($id);
$flight->destinations = $data;
$flight->save();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.