#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. Спасибо, друг