Как выполнить простой контрольный журнал в простом CRUD Laravel - PullRequest
0 голосов
/ 13 июня 2018

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

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

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

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

Ответы [ 4 ]

0 голосов
/ 18 августа 2018

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

0 голосов
/ 13 июня 2018

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

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 голосов
/ 13 июня 2018

Вы можете сохранить изменения модели в отдельной модели, скажем, 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 голосов
/ 13 июня 2018

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

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

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

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

   table:  update_timeline

   postid : user_id : updated_date 

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

...