Я новичок в laravel и использую axios
для публикации массива данных из vue js
.
Используя этот метод:
axios.post("/student/qualification", this.qitems)
.then(response => {
this.pullQAttachments();
this.$snotify.success("Qualification updated Sucessfully", "Success");
})
.catch(e => {
console.log(e);
});
Массив в формате:
[{
"id": 5,
"student_id": 41,
"board": "SLC",
"year_of_completion": "2014",
"aggregate_percent": "45%",
"symbol_no": "43565656",
"division": "First",
"created_at": "2019-03-08 14:26:06",
"updated_at": "2019-03-08 14:26:06",
"deleted_at": null
}, {
"id": null,
"student_id": "41",
"board": "10 +2",
"year_of_completion": "2200",
"aggregate_percent": null,
"symbol_no": null,
"division": null
}]
В контроллере:
Я хотел обновить первый элемент, т.е. id=5
и создать новый, где id=null
Я попробовал подход, подобный приведенному здесь:
public function postStudentQualification(Request $request)
{
$datas = $request->all();
foreach ($datas as $qual) {
StudentQualification::updateOrCreate(
['id' => $qual["id"]],
[
'student_id' => $qual["student_id"],
'board' => $qual["board"],
'symbol_no' => $qual["symbol_no"],
'aggregate_percent' => $qual["aggregate_percent"],
'division' => $qual["division"],
'year_of_completion' => $qual["year_of_completion"]
]);
}
}
На самом деле, этот подход работает, как и ожидалось, но есть ли другой подход использования updateOrCreate
без назначения отдельного поля, например
'student_id'=> $qual["student_id"],
Или я пытался updateOrCreate
использовать этот способ, но он не работает:
public function postStudentQualification(Request $request)
{
$datas = $request->all();
foreach ($datas as $qual) {
StudentQualification::updateOrCreate(
['id' => $qual["id"]],
[
$qual
]);
}
}
Я отправляю точно такое же значение из vue.js
, которое находится на Model
,
protected $fillable = ['student_id','board','year_of_completion','aggregate_percent','symbol_no','division'];