Как выполнить простой контрольный журнал в простом CRUD Laravel

как получить имя пользователя последнего человека, который обновил форму, используя (updated_at) метка времени в laravel и какую логику или подход лучше всего использовать? можно ли использовать только в блейде? или мне нужно поместить код в мой контроллер?

Пример: Обновлено: 13-Июнь-2018 Обновлено: имя пользователя

в настоящее время я могу получить только обновленную дату, используя этот код в моем блейде

Updated:{{ date('d-M-Y', strtotime($leads->updated_at))}}

0

Решение

Вам нужны эти два столбца в таблице базы данных: updated_at а также last_updated_by

в вашем контроллере, когда вы обновляете эту запись, добавьте идентификатор пользователя, который обновляет запись в last_updated_by поле

нота : это будет отображать только последнее обновление по идентификатору пользователя.

если вы хотите сохранить каждый updated_by, создайте новую таблицу:

   table:  update_timeline

postid : user_id : updated_date

Теперь вы можете использовать объединяющий запрос для этих двух таблиц и получать все обновления, если хотите.

0

Другие решения

Таблица базы данных

CREATE TABLE `leads` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `lead_history` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`lead_id` int(11) unsigned DEFAULT NULL,
`updated_by` int(11) unsigned DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

модели

class Lead extends Model {

public function history()
{
return $this->hasMany(LeadHistory::class,'lead_id');
}

}
class LeadHistory extends Model{

public function lead()
{
return $this->belongsTo(Lead::class);
}

public function user()
{
return $this->belongsTo(User::class, 'updated_by');
}
}

Теперь приведи потенциальных клиентов

$leads = Lead::all(); //for demo purpose, always use pagination based results or fetch with condition

Вот шаблон рендеринга

@foreach ($leads as $lead)
<p>This is your lead: {{ $lead->name }}</p>
@if ($lead->history)
<label>Lead Updated By:</label>
<ul>
@foreach ($lead->history as $history)
<li>{{$history->user->username}}</li>
@endforeach
</ul>
@endif
@endforeach

Предполагая, что у вас есть пользовательская таблица с полем «username»

Всякий раз, когда пользователь обновляет запрос, вам просто нужно вставить запись в таблицу истории заказов с этим идентификатором пользователя в поле updated_by.

0

Вы можете хранить изменения модели в отдельной модели, скажем, Activity, Эта модель может иметь полиморфное отношение к модели, внешний ключ к пользователю, который выполнил действие, и тип операции (т.е. create, update, delete).

Затем вы можете создать признак, который вы применяете к моделям, который автоматически создает запись активности каждый раз, когда модель создается, обновляется или удаляется:

trait Auditable
{
public static function bootAuditable()
{
static::created(function ($model) {
$model->recordActivity('create');
});

static::updated(function ($model) {
$model->recordActivity('update');
});

static::deleted(function ($model) {
$model->recordActivity('delete');
});
}

protected function recordActivity($operation)
{
$activity = new Activity([
'operation' => $operation,
'user_id' => Auth::id(),
]);

$activity->model()->associate($this);

$activity->save();
}
}

После этого вы сможете грубо перечислить операции для модели, т.е.

  1. Пользователь 1 создал модель 1
  2. Пользователь 2 обновил Модель 1
  3. Пользователь 1 создал модель 2
  4. Пользователь 1 удалил модель 1

…и так далее.

0

Я создал пакет для контрольных журналов made_by, updated_by. Вы можете проверить это на https://github.com/insenseanalytics/laravel-user-audit-trails

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector