Как получить имя атрибута модели по идентификатору с помощью Spatie / Activitylog? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь получить имя сотрудника на основе employee_id модели Task, используя свойства атрибутов таблицы Spatie / Activitylog activity_log.

Моя модель:

use LogsActivity;

    protected $fillable = ['id','employee_id', 'name', 'description'......];

    protected static $logAttributes = ['id','employee_id','name', 'description'......];

    protected static $logFillable = true;
    protected static $logUnguarded = true;

Мой контроллер:

    {
        $activity = Activity::orderBy('id', 'DESC')->paginate(15);

        return view('adminlte::home', ['activity' => $activity]);
    }

Мой клинок:

@foreach($activity as $act)

  {{$act->changes['attributes']['employee_id']}}

@endforeach

Записи, сохраненные в поле свойств:

{"attributes":{"id":170,"employee_id":"[\"1\",\"2\"]","name":"test","description":"test",......}}

Кроме того, в моем клинке результат:

|employee_id | name       | description| ...
|------------|------------|------------|--------
|["1","2"]   | test       | test       | ....

Вопрос в том, как получить поле Name на основе employee_id. Например, в данном случае Джон, Дэвид (не их идентификаторы (["1", "2"]). Поэтому я хочу получить имена вместо идентификаторов.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 марта 2019

Я бы выбрал их из базы данных

1) создаю список идентификаторов и получаю их.

$employees = Employee::whereIn('id', $activity->pluck('employee_id')->flatten())
    ->get()
    ->mapWithKeys(function ($employee) {
        return [$employee->id => $employee];
    });

2) Отправьте его клиенту

return view('adminlte::home', ['activity' => $activity, 'employees' => $employees]);

3) Используйте отображение для отображения имен

@foreach($activity as $act)
     @foreach($act->changes['attributes']['employee_id'] as $employeeId)
          {{ $employees[$employeeId] }}, 
     @endforeach
@endforeach
...