已编辑:在刀片中,已加载了一些数据($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() }}
我进入屏幕:
{"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"}
但是,如果我尝试使用以下命令从该对象仅打印“ comentario”:
{{ $carga->Log()->first()->comentario }}
我收到此错误:Trying to get property of non-object
为什么?
答案 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 }}->