Метод обновления в Laravel не обновляет запись - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужно обновить запись базы данных. Сначала я нахожу запись по ее первичному ключу, затем фильтрую элементы в запросе и, наконец, вызываю метод upadate. Ну, ничего не происходит.

Контроллер

$rec = \App\Contact::findOrFail($id);
$rec->update($request->only('first','last','city','region','zip'));

Обычный $ request значение выглядит так:

   {
        "_token": "myeF9lZOQBB8oH4h1ogUoZe4aEeEPxCw49J4qFtU",
        "_method": "PATCH",
        "first": "asdf",
        "last": "egsrsdeeee",
        "city": "erg",
        "region": "wfd",
        "zip": "23443",
        "phones": [
            "25313",
            "25313234",
            "25313234",
            "2531323523"
        ],
        "emails": [
            "jid@se.cz"
        ],
        "addresses": [
            "Petrovka 123",
            "dalsi vole 12"
        ]
    }

Что я делаю не так? Кажется, это должно работать.

Ответы [ 4 ]

0 голосов
/ 08 ноября 2019

Сначала Ваша модель Все поля должны быть заполнены

protected $fillable = [
     'first',
     'last',
     'city',
     'region',
     'zip',
];

Затем ваш контроллер обновит ваш код записи данных как

$input = $request->all();
$rec = \App\Contact::findOrFail($id);
$rec->update($input);
0 голосов
/ 08 ноября 2019

Можем ли мы взглянуть на вашу модель? Вызов $request->only() возвращает значения запросов в формате массива, вам нужно убедиться, что индексы этих значений находятся в свойстве $fillables вашей модели.

А также вы уверены, чтометод обновления возвращает истину? Можете ли вы показать выходные данные, если сбросите их:

$array = $request->only('first','last','city','region','zip');
\var_dump($rec->update($array));

И, наконец, вы также можете просто вызвать $request->toArray():

$rec->update($request->toArray());

, поскольку ваша модель уже знает, что она должна заполнятькак указано в свойстве $fillable, этим вы также снимаете с себя ответственность за знание того, какими индексами вы должны управлять в этом конкретном классе, и просто позволяете модели выполнять свою задачу.

0 голосов
/ 08 ноября 2019

На модели Contact.php добавьте в начало следующее:

protected $fillable = [
     'first',
     'last',
     'city',
     'region',
     'zip',
];

Это позволит вам массово назначить только эти поля.

0 голосов
/ 08 ноября 2019

Это может быть связано с массовым присвоением или ошибкой сопоставления, попробуйте вручную присвоить значения

$rec = \App\Contact::findOrFail($id);
$rec->first = $request->first;
$rec->last = $request->last;
$rec->city = $request->city;
$rec->region = $request->region;
$rec->zip = $request->zip;
$rec->save();

Или отключите защиту массового присвоения в вашей модели Contact.php

protected $guarded = []; // Yolo!

Надеюсьэто помогает

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