Laravel, пытаюсь получить свойство необъекта в виде лезвия - PullRequest
0 голосов
/ 09 октября 2019

РЕДАКТИРОВАНИЕ: В блейде, с некоторыми загруженными данными ($carga - коллекция)

$carga определяется как:

$carga = UploadsPois::where([
    ['estado_carga', Util::UPLOAD_POIS_CARGA_INGRESADA],
    ['schema_country', $schema_country]
])
    ->with([
        'UserResponsable',
        'Pois' => function ($pois) {
            $pois->where('pois_validate', Util::POIS_INGRESADO);
        },
        'Log' => function ($log) use ($schema_country) {
            $log->where('schema_country', $schema_country)
                ->whereNull('address_id')
                ->orderBy('id', 'desc');
                //->first();
        }
    ])
    ->orderBy('id', 'asc')
    ->get();

, если я надеваю блейд:

{{$carga->Log()->first()}}
{{ $carga->Log()->first() }}

enter image description here

Я получаю на экране:

{"id":21885,"user_id":380,"accion":"Direcci\u00f3n aprobada","fecha":"2018-03-19 18:47:49","upload_pois_id":617,"address_id":142154,"comentario":"","pois_id":null,"schema_country":"country_cl"} 
{"id":21885,"user_id":380,"accion":"Direcci\u00f3n aprobada","fecha":"2018-03-19 18:47:49","upload_pois_id":617,"address_id":142154,"comentario":"","pois_id":null,"schema_country":"country_cl"}

enter image description here

Но если я попытаюсь напечатать только "коментарий" из этого объекта с помощью:

{{ $carga->Log()->first()->comentario }}

enter image description here

Я получу эту ошибку: Trying to get property of non-object

enter image description here

Почему?

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Я сказал это по вашему другому вопросу, но если $carga->log->first() равно null, вы не можете назвать comentario (так как null->comentario не работает).

Также, не используйте () на log;вы используете with(), поэтому $carga->log доступен как свойство. Если вы используете (), вы в основном выбрасываете весь фильтр, который вы применяете к log в вашем контроллере, делая новый вызов построителю запросов. Не делайте этого (Следует подчеркнуть, что, как и во всех других ответах, предлагается использовать $carga->log()->first(), но в данном случае это просто объективно неправильно).

Правильный синтаксис будет:

{{ $carga->log->first() ? $carga->log->first()->comentario : 'No comentario...' }}

Используется простой троичный оператор для первой проверки, если $carga->log->first() не null, и выводится либо comentario, либо простая строка No comentario...

- Изменить -

Я должен добавить, что вы можете (или, по крайней мере, должны иметь возможность) использовать ->first() в функции и просто пропустить ->first() в вызове (видел другой ваш вопрос,что-то странное там происходит):

...
->orderBy('id', 'desc')->first();

{{ $carga->log ? $carga->log->comentario : 'No comentario...' }}

Любой из них будет обрабатывать случай null, который является основной причиной вашей проблемы здесь.

0 голосов
/ 09 октября 2019

это использование означает, что «Log()» является методом:

{{$carga->Log()->first()}}

К нему следует обращаться как к свойству:

{{ $carga->Log->first()->comentario }}-> 
...