I am getting data in Laravel API and I want to add it to the JSON inside one of the columns in my table. But I am getting an error. Can you help me to save my JSON into the database column, please?
In my users table, I have a column called answer_history with this JSON
[
[
{
"quizID": 1,
"questionID": 1,
"selectedAnswer": "Green",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 2,
"selectedAnswer": "Skin",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 3,
"selectedAnswer": "Pup",
"correctAnswer": true
}
]
]
This is my code to update the column
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\User $user
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$answers = User::find($id)->answer_history;
$newAnswers = $request->answerHistory;
$answers[] = $newAnswers;
$answers->save();
return $answers;
}
I receive this json
[
{
"quizID": 1,
"questionID": 1,
"selectedAnswer": "White",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 2,
"selectedAnswer": "Keratin",
"correctAnswer": true
},
{
"quizID": 1,
"questionID": 3,
"selectedAnswer": "Cub",
"correctAnswer": false
}
]
If I comment $answer->save(), the response in my browser-.network->response is
[
[
{
"quizID": 1,
"questionID": 1,
"selectedAnswer": "Green",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 2,
"selectedAnswer": "Skin",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 3,
"selectedAnswer": "Pup",
"correctAnswer": true
}
],
[
{
"quizID": 1,
"questionID": 1,
"selectedAnswer": "White",
"correctAnswer": false
},
{
"quizID": 1,
"questionID": 2,
"selectedAnswer": "Keratin",
"correctAnswer": true
},
{
"quizID": 1,
"questionID": 3,
"selectedAnswer": "Cub",
"correctAnswer": false
}
]
]
If not, I get this error
"Call to a member function save() on array"
I added cast in my model
protected $casts = [
'email_verified_at' => 'datetime',
'answer_history' => 'array'
];
It's because the variable $answers is a value of your model. You need to keep it as your model
Try this
public function update(Request $request, $id)
{
$answers = User::find($id);
$newAnswers = $request->answerHistory;
$answers->answer_history[] = $newAnswers;
$answers->save();
return $answers;
}
Function save() is from the User
model and not the value...
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.