Как получить старое значение столбца в таблице после обновления laravel

#php #mysql #laravel #eloquent

#php #mysql #laravel #красноречивый

Вопрос:

Мне интересно, возможно ли это.В моем проекте пользователь может обновить значение столбца таблицы.Но другие пользователи не могут видеть обновленное значение до 14 дней.Значение возрастом до 14 дней будет заполняться при каждой операции возврата.Возможно ли это сделать в laravel?

Ответ №1:

Вам нужно либо использовать кэширование, либо добавить еще один столбец в вызываемую таблицу old_column , тогда в вашем Model вы могли бы включить средство получения / доступа для проверки updated_at метки времени в строке, а затем либо вернуть новое / старое значение.

     public function getColumnAttribute($value)
    {
        if($this->updated_at < Carbon::now()->subWeeks(2)) {
            return $this->old_column;
        }
        return $value;
    }
  

имейте в виду, что, поскольку вы не указали имена своих столбцов, я буквально назвал их:

column и old_column имя функции в вашей модели должно быть get{COLUMN NAME}Attribute

Смотрите: https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor

Обратите внимание, если вы хотите, чтобы пользователь, который редактировал значение, увидел изменение, вы должны включить user_id его в таблицу. Но на этом этапе вы не сохраните права собственности на изменения и было бы лучше создать diff таблицу стилей для размещения всех этих изменений в виде журнала.

Ответ №2:

Есть только один способ сделать это, вам нужно сохранить оба значения. Возьмем пример price столбца. Мы можем определить средства доступа в модели

Есть два столбца price amp; old_price

 public function getPriceAttribute($value)
{
    if($this->updated_at < Carbon::now()->subWeeks(2)) { // 14 days check
        return $this->old_price;
    }
    return $value;
}
  

И затем вы можете использовать его как

 $product->price;
  

Комментарии:

1. Спасибо, друг