Помещение определенных значений массивов в таблицу представлений Laravel - PullRequest
0 голосов
/ 22 мая 2019

У меня есть этот вложенный массив в переменной $ audits, который я передаю представлению Laravel 5.8:

array:4 [▼
  0 => array:3 [▼
    "action" => "Case initiated by:"
    "user" => "Doe, Jane"
    "timestamp" => Carbon @1558353758 {#419 ▶}
  ]
  1 => array:3 [▼
    "action" => "New head mediator:"
    "user" => "Doe, Jane"
    "timestamp" => Carbon @1558353758 {#430 ▶}
  ]
  2 => array:3 [▼
    "action" => "Case closed by:"
    "user" => "Doe, Jane"
    "timestamp" => Carbon @1558353787 {#467 ▶}
  ]
  3 => array:3 [▼
    "action" => "Case re-opened by:"
    "user" => "Doe, Jane"
    "timestamp" => Carbon @1558353791 {#474 ▶}
  ]
]

Моя цель - заполнить таблицу в представлении, чтобы получить следующий вывод:

Action                  User        Date/time (UTC)
-------------------------------------------------------
Case initiated by:      Doe, Jane   2019-05-20 12:02:38
New head mediator:      Doe, Jane   2019-05-20 12:02:38
Case closed by:         Doe, Jane   2019-05-20 12:03:07
Case re-opened by:      Doe, Jane   2019-05-20 12:03:11

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

<table>
  <th>Action</th>
  <th>User</th>
  <th>Date/time (UTC)</th>

 @foreach ($audits as $audit)
    @foreach ($audit as $value)
      <tr>
        <td>{{ $value['action'] }}</td>
        <td>{{ $value['user'] }}</td>
        <td>{{ $value['timestamp'] }}</td>
      </tr>
    @endforeach
  @endforeach
</table>

Однако, это выдаст мне сообщения об ошибках, так как представление, кажется, не в состоянииизвлекать такие конкретные значения из массивов, поскольку он может обрабатывать только строки.Итак, я попытался преобразовать массив в объекты, использовать кодировку JSON и т. Д., Но безрезультатно.

То, как массив создается в контроллере, выглядит примерно так (может быть, кто-нибудь может указать мне, каксделайте правильную коллекцию или объект, чтобы он мог лучше обрабатываться представлением):

public function show(Project $project)
  {

    $audits_raw= $project->audits;

    foreach ($audits_raw as $audit_raw) {

      foreach ($audit_raw->new_values as $action => $id) {

        if ($action == 'initiator_id') {
          $actions[] = 'Case initiated by:';
          $users[] = $this->userName($id);
          $timestamps[] = $audit_raw->updated_at;
        } elseif ($action == 'head_mediator_id') {
          $actions[] = 'New head mediator:';
          $users[] = $this->userName($id);
          $timestamps[] = $audit_raw->updated_at;
        } elseif ($action == 'marked_for_deletion' && $id == 1) {
          $actions[] = 'Case closed by:';
          $users[] = $this->userName($audit_raw->user_id);
          $timestamps[] = $audit_raw->updated_at;
        } elseif ($action == 'marked_for_deletion' && $id == 0) {
          $actions[] = 'Case re-opened by:';
          $users[] = $this->userName($audit_raw->user_id);
          $timestamps[] = $audit_raw->updated_at;
        }
      }
    }

    $audits = array_map(function ($action, $user, $timestamp) {
      return array_combine(
        ['action', 'user', 'timestamp'],
         [$action, $user, $timestamp]
      );
     }, $actions, $users, $timestamps);

    return view('admin.billing.show', compact('project', 'audits', 'actions'));

  }

  protected function userName($id)
  {
    $user = User::where('id', $id)->first();
    $username = $user->last_name.', '.$user->first_name;
    return $username;
  }

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Изменить вид.

  @foreach($audits as $key)
  <tr>
    <td>{{ $key['action'] }}</td>
    <td>{{ $key['user'] }}</td>
    <td>{{ Carbon\Carbon::parse($key['timestamp'])->format('Y-m-d H:i:s') }} . 
    </td>
  </tr>
 @endforeach
0 голосов
/ 22 мая 2019

Вы можете хранить вложенный массив в переменной $audits и использовать Carbon для преобразования date object в string:

@foreach ($audits as $audit)
    <tr>
    @foreach ($audit as $value)
        <td>{{ $value['action'] }}</td>
        <td>{{ $value['user'] }}</td>
        <td>{{ Carbon\Carbon::parse($value['timestamp'])->format('Y-m-d H:i:s') }}</td>
    @endforeach
    </tr>
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...