laravel, используя updateOrCreate для массива объектов - PullRequest
0 голосов
/ 08 марта 2019

Я новичок в 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'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...