Не удалось вызвать метод SAVE для объекта Model Laravel - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь вызвать save метод объекта Model Complaints Model для обновления указанного c ресурса в базе данных, но когда я отправляю запрос POST по URL-адресу API, выдается эта ошибка

BadMethodCallException: метод Illuminate \ Database \ Eloquent \ Collection :: save не существует.

Я также пытался вызвать метод update, но с той же ошибкой.

Код для редактирования:

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();

            $complaint->title = $request->input('Complaint_Subject');
            $complaint->description = $request->input('Complaint_Details');
            $complaint->address = $request->input('Complaint_Address');

            $complaint->update();

            return [
                'save_status' => "success"
            ];

самая первая строка возвращает ответ и правильный ответ.

И

Также я пытаюсь вызвать метод delete или destroy для удаления ресурса, но он также выдает ту же ошибку

BadMethodCallException: метод Illuminate \ Database \ Eloquent \ Collection :: delete не существует.

или

BadMethodCallException: Метод Illuminate \ Database \ Eloquent \ Collection :: destroy не существует.

Код для удаления:

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();
            $complaint->destroy($request->input('id'));

            return [
                'request_status' => 'success',
                'complaint' => $complaint
            ];

здесь также ответ возвращается правильно.

Обратите внимание, что complaint_id не является первичным ключом в таблице, поэтому я не могу просто позвонить Complaint::find($request->input('id')). Мне нужно перепроверить это значение столбца complaint_id, чтобы найти ресурс. Я искал со вчерашнего дня, но не смог найти никакого решения. Как я могу решить эту проблему. Спасибо !!!

Ответы [ 3 ]

2 голосов
/ 19 апреля 2020

Если ваш $complaint - это набор выходных данных. Так что save не сработает, если вы измените свой код на $complaint = Complaint::where('complaint_id', $request->input('id'))->first();, тогда save() будет работать.

1 голос
/ 19 апреля 2020

В вашем запросе

$complaint = Complaint::where('complaint_id', $request->input('id'))->get();

возвращается Associative Arrays

Но если вы используете

$complaint = Complaint::where('complaint_id', $request->input('id'))->first();

, возвращается Indexed or Numeric Arrays. Тогда вы должны использовать $complaint[0]->destroy($request->input('id')); или $complaint[1]->destroy($request->input('id')); и так один

1 голос
/ 19 апреля 2020

просто используйте first () вместо get ()

Complaint::where('complaint_id', $request->id)->first()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...