как правильно сделать универсальный метод обновления записи php? laravel
//1 Иногда нужно вставить такие поля в одном месте кода
$user->status = 'closed';
$user->profit = $profit;
$user->profit_percent = $percent;
$user->save();
//в 2 та же модель только обновить
$user->profit = $profit;
$user->profit_percent = $percent;
$user->save();
//в 3
$user->status = 'closed';
$user->save();
Есть мысль создать сервис который вызывался ьы в в любых местах только данные передавать в него только те какие нужно обновить
class Service {
public function update(User $user, string $status, int|float $profit, int|float $profit_percent)
{
//и тут эти поля проверять как то
}
// или массив перебирать как правильно?
public function update(User $user, array $parameters)
{
//и тут эти поля проверять как то
foreach($parameters as $key => $value){
$user->{$key} = value;
}
}
}
Ответы (2 шт):
Автор решения: Alukard Nosferatu
→ Ссылка
можно вынести в отдельную функцию в трейт
public function upd($user, $arr){
$user->profit = $arr[profit];
$user->profit_percent = $arr[percent]; return $user;
}
и вызывать в нужном месте
Автор решения: newman
→ Ссылка
А зачем какой-то отдельный сервис для этого делать? Можно же добавить сразу в модель User соответствующие методы и использовать их.
Например, метод close
public function close()
{
$this->status = 'closed';
$this->save();
}
И вызывать его в тех местах где требуется "закрыть" пользователя. Такми образом код становится понятнее. А внутри метода потом можно еще что-то добавить (если потребуется), какие-то действия по закрытию.
Аналогично можно сделать и метод для установки profit и profit_percent.
Если у вас "закрытие" аккаунта это одна отдельная операция, а установка значений другая и друг от друга они не зависят - то и не надо их реализовывать в одном методе.