как восстановить мягкое удаление с еще одним столбцом? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть таблица с именем data, и я использую мягкое удаление, чтобы удалить запись. У меня есть еще одно поле в моей таблице данных, которое также обновляется при удалении записи. но когда я восстанавливаю эту мягкую удаленную запись, она обновляет мое поле selected_at, но не обновляет другое поле. Я использую этот код

Data::withTrashed()->find($id)->restore();

Как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 31 мая 2019

Вы можете написать наблюдателя, который подключится к событию restored:

 <?php

namespace App\Observers;

class DataObserver
{
    public function restored($data)
    {
        // Update field here
    }

}

И, конечно, зарегистрируйте его boot() методом поставщика услуг:

Data::observe(DataObserver::class);

Примечание: в зависимости от времени вы можете предпочесть событие restoring вместо

0 голосов
/ 31 мая 2019

Это будет работать

Data::withTrashed()->whereId($id)->update([
    'deleted_at'=>null,
    'other_column'=>$value,
]);
0 голосов
/ 31 мая 2019

Для этого вы можете создать функцию в вашей модели Data , которая сделает это за вас.

public function restoreItem()
{
    $this->deleted_at = null;
    $this->other_field = null;
    $this->save();
}

Теперь вам нужно вызвать это в вашем контроллере: -

Data::withTrashed()->find($id)->restoreItem();

Вот и все.

0 голосов
/ 31 мая 2019
Data::withTrashed()->find($id)->restore();

означало, что это только для восстановления, для которого в столбце dele_at установлено значение null так что если вы хотите обновить другое поле, просто выполните обычные действия для обновления полей после восстановления его

как этот

Data::withTrashed()->find($id)->restore();
Data::find($id)->update($array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...