Php Laravel 5.6尝试获取非对象的属性
当我尝试回显该值时,我收到一个异常。我用dd()检查集合,并且不为null 我的模型: 客户:Php Laravel 5.6尝试获取非对象的属性,php,laravel,laravel-5,foreach,eager-loading,Php,Laravel,Laravel 5,Foreach,Eager Loading,当我尝试回显该值时,我收到一个异常。我用dd()检查集合,并且不为null 我的模型: 客户: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Cliente extends Model { protected $table = 'clientes'; public function ordens() { return $this->hasMany('App\
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Cliente extends Model
{
protected $table = 'clientes';
public function ordens() {
return $this->hasMany('App\OrdemServico','cliente_id');
}
}
部分视图主页:
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nome Cliente</th>
<th scope="col">Modelo</th>
<th scope="col">Status O.S</th>
</tr>
</thead>
@foreach($ordens as $ordem)
<?php //dd($ordem->clientes->nome); ?>
<tr>
<th scope="row"></th>
<td>{{$ordem->id}}</td>
<td>{{$ordem->clientes->nome}}</td>
<td></td>
<td></td>
<td><button class="btn btn-outline-primary" onclick="location.href='{{ route('ordem_servico.show',1) }}'">Mostrar mais</button></td>
</tr>
@endforeach
</tbody>
</table>
#
诺姆客户
摩洛
状态O.S
@foreach($ordens as$ordem)
{{$ordem->id}
{{$ordem->clientes->nome}
莫斯特拉尔迈斯酒店
@endforeach
当我
<?php dd($ordem->clientes->nome); ?>
我收到:
但当我尝试回显该值时,会收到一个execpetion
dd()为$ordem
$ordem->clients
是数组,如下所示
@foreach($ordens as $ordem)
<?php //dd($ordem->clientes->nome); ?>
<tr>
<th scope="row"></th>
<td>{{$ordem->id}}</td>
@foreach($ordem->clientes->toArray() as $client)
<td>{{$client['nome']}}</td>
@endforeach
<td></td>
<td></td>
<td><button class="btn btn-outline-primary" onclick="location.href='{{ route('ordem_servico.show',1) }}'">Mostrar mais</button></td>
</tr>
@endforeach
@foreach($ordensas$ordem)
{{$ordem->id}
@foreach($ordem->clients->toArray()作为$client)
{{$client['nome']}
@endforeach
莫斯特拉尔迈斯酒店
@endforeach
假设订单只属于一个App\cliente
,那么您的关系可能应该被称为cliente()
。。。您应该传递第三个参数,即other\u键
。。。您可以使用英语避免此类错误(因为laravel将搜索客户id和订单id)
请尝试以下代码
名称空间应用程序
使用Illumb\Database\Elount\Model
class Cliente extends Model
{
protected $table = 'clientes';
public function ordens() {
return $this->hasMany('App\OrdemServico','cliente_id');
}
}
及
您的代码是完美的,您的一个客户关系可能是空的,而您的代码在循环中,从而导致错误。只需添加,如果检查应该有效
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nome Cliente</th>
<th scope="col">Modelo</th>
<th scope="col">Status O.S</th>
</tr>
</thead>
@foreach($ordens as $ordem)
<?php //dd($ordem->clientes->nome); ?>
<tr>
<th scope="row"></th>
<td>{{$ordem->id}}</td>
<td>
@if ($ordem->clientes)
{{$ordem->clientes->nome}}
@else
'No Client'
@endif
</td>
<td></td>
<td></td>
<td><button class="btn btn-outline-primary" onclick="location.href='{{ route('ordem_servico.show',1) }}'">Mostrar mais</button></td>
</tr>
@endforeach
</tbody>
</table>
#
诺姆客户
摩洛
状态O.S
@foreach($ordens as$ordem)
{{$ordem->id}
@如果($ordem->客户)
{{$ordem->clientes->nome}
@否则
“没有客户”
@恩迪夫
莫斯特拉尔迈斯酒店
@endforeach
注意:始终尝试使用单数名称表示与的关系,因为它会返回一个模型。例如,您应该使用客户
关系名称,而不是客户
所有$ordem
是否都有客户
?您正在dd
”循环中的第一项,但是如果第二项没有客户怎么办?你会看到这个例外。使用如下:optional($ordem->clientes)->nome
如果是空的$ordem->clientes
订单有多少客户?如果它有多个用户,您应该使用$oderm->clientes->first()->name
或循环访问所有客户。谢谢大家。选择*fromordens\u servico
select*fromclients
whereclients
id
在('1','2')中,急切的加载正在尝试查找id为1和2的客户。但我有2美元的订单给同一个客户。使用可选选项,名称将被回显,但第二个名称不会被回显。我会想办法解决的。再次感谢。你给了我一个北方,谢谢你的回复。但我仍然得到“试图得到非对象的属性‘nome’”。正在返回TRUE。使用公共函数cliente(){return$this->belongsTo('App\cliente','cliente_id');}。拉威尔选择正确。只搜索一个客户端。从('1')中的clientes
中选择*
class Cliente extends Model
{
protected $table = 'clientes';
public function ordens() {
return $this->hasMany('App\OrdemServico','cliente_id');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class OrdemServico extends Model
{
protected $table = 'ordens_servico';
public function cliente() {
return $this->belongsTo('App\Cliente', 'id', 'cliente_id');
}
}
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nome Cliente</th>
<th scope="col">Modelo</th>
<th scope="col">Status O.S</th>
</tr>
</thead>
@foreach($ordens as $ordem)
<?php //dd($ordem->clientes->nome); ?>
<tr>
<th scope="row"></th>
<td>{{$ordem->id}}</td>
<td>
@if ($ordem->clientes)
{{$ordem->clientes->nome}}
@else
'No Client'
@endif
</td>
<td></td>
<td></td>
<td><button class="btn btn-outline-primary" onclick="location.href='{{ route('ordem_servico.show',1) }}'">Mostrar mais</button></td>
</tr>
@endforeach
</tbody>
</table>