Перебрать вложенный объект в Laravel

Я хочу перебрать вложенный объект в Laravel и получить значения в файле блейда.

Образец объекта:

[
    {
        "id": 43,
        "user_id": 2,
        "event": "updated",
        "auditable_id": 34,
        "auditable_type": "App\\Bill",
        "old_values": {
            "message": "test messgare",
            "napprover": "24",
            "status": "Added"
        },
        "new_values": {
            "message": "Second Audit",
            "napprover": "10001",
            "status": "Bill Processing"
        },
        "url": "http://localhost:8000/admin/bills/34",
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3186.0 Safari/537.36",
        "created_at": "2017-08-16 18:44:12"
    },
    {
        "id": 41,
        "user_id": 2,
        "event": "created",
        "auditable_id": 34,
        "auditable_type": "App\\Bill",
        "old_values": [],
        "new_values": {
            "bill_no": "2017081527",
            "bill_type": "BILL",
            "bill_date": "08/15/2017",
            "vendor_id": "2563582",
            "priority": "Moderate Priority",
            "amount": "125245",
            "message": "test messgare",
            "initiator": "10001",
            "napprover": "10003",
            "tat": "1",
            "status": "Added",
            "department": "6",
            "created_at": "2017-08-15 11:57:45"
        },
        "url": "http://localhost:8000/admin/bills",
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3185.0 Safari/537.36",
        "created_at": "2017-08-15 11:57:45"
    }
]

Контроллер:

public function show($id)
{
    $bill   = Bill::findOrFail($id);
    $vendor = $bill->vendor_id;
    $user   = User::where('vendor_id', $vendor)->get();
    $all    = $bill->audits()->get();
    return view('admin.BillDetail', compact('bill','user','all'));
}

файл блейда:

@foreach($all as $al)
    @foreach($all as $a)
    <li>{{$a}}</li>
    @endforeach
@endforeach

Я хочу получить доступ к объектам old_values и new_values

Как получить это значение в цикле


person Vinod Vishwakarma    schedule 17.08.2017    source источник


Ответы (1)


Как я вижу, ваш образец объекта old_values и new_values - это один объект, а не массив объектов, поэтому вы можете сделать это следующим образом:

@foreach($all as $al)
    @if(isset($al->new_values))
    <li>{{$al->new_values->message}}</li>
    @endif
@endforeach

Примечание: если существует возможность нулевого или пустого объекта, вам необходимо добавить некоторую проверку перед доступом к какому-либо свойству объекта, иначе произойдет исключение.

person Govind Samrow    schedule 17.08.2017
comment
Уже сказали вам, что вам нужно проверить, существуют ли значения в массиве или нет, иначе это будет через исключение. - person Govind Samrow; 18.08.2017