Laravel,尝试在刀片视图中获取非对象的属性

时间:2019-10-09 13:58:22

标签: laravel laravel-blade

已编辑:在刀片中,已加载了一些数据($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

但是,如果我尝试使用以下命令从该对象仅打印“ comentario”:

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

enter image description here

我收到此错误:Trying to get property of non-object

enter image description here

为什么?

2 个答案:

答案 0 :(得分:1)

我在另一个问题上是这样说的,但是如果$carga->log->first()null,则无法在其上调用comentario(因为null->comentario不起作用)。

此外,请勿在{{1​​}}上使用() ;您正在使用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...' }} 情况,这是这里问题的根本原因。

答案 1 :(得分:0)

此用法表示“ Log()”是一种方法:

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

它应该作为属性访问:

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