Как вернуть обновленные данные после обновления в Laravel Модель? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть модель Driver, в которой есть столбцы: name, branch, status_id, etc.. Обновление на самом деле нормально и работает, моя проблема в том, как вернуть обновленный?

Вот что я пробовал до сих пор, но он возвращает boolean, в результате чего возвращается ошибка в моей консоли:

Содержимое ответа должно быть строкой или объектом, реализующим __toString (), дано логическое значение.

public function updateStatus(Driver $driver)
{
    return $driver->update($this->validateStatus());
}

public function validateStatus()
{
    return $this->validate(request(), [
        'status_id' => 'required|min:1|max:3'
    ]);
}

Я ожидаю, что он должен вернуть все столбцы драйвера.

Я был на этой ссылке , но это не помогло. Кто-то знает, как это сделать?

Ответы [ 4 ]

4 голосов
/ 07 февраля 2020

Вы можете использовать tap() помощник, который будет возвращать обновленный объект после обновления следующим образом:

return tap($driver)->update($this->validateStatus());

Подробнее об этом здесь: Tap helper

2 голосов
/ 07 февраля 2020

Я думаю, что не нужно никакой модели помощника для этого

в контроллере вы можете сделать так

$driver = Driver::find(1);
$driver->name = "expmale";
$driver->save();

return $driver;

или другим способом

$driver = Driver::find(1);
$driver->update([
      'name'=> "expmale"
      ]);

return $driver;
1 голос
/ 07 февраля 2020

возвращается как объект вместо логический тип

public function updateStatus(Driver $driver)
{
   $driver->update($this->validateStatus());
   return $driver;// first way
   // return tap($driver)->update($this->validateStatus()); //second way
}

public function validateStatus()
{
    return $this->validate(request(), [
        'status_id' => 'required|min:1|max:3'
    ]);
}
0 голосов
/ 07 февраля 2020

Я знаю, что на этот вопрос уже есть ответ, но в идеале вы не хотите использовать метод обновления. Это просто вспомогательный метод модели, который мало что дает. Внутренне он делает то, что я включил ниже, за исключением того, что возвращает результат save().

Вы хотели бы сделать что-то вроде этого:

if ($driver->fill($this->validateStatus)->save()) {
    return $driver;
}

throw new \RuntimeException('Update failed, perhaps put something else here);

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

...