Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.6尝试获取非对象的属性_Php_Laravel_Laravel 5_Foreach_Eager Loading - Fatal编程技术网

Php Laravel 5.6尝试获取非对象的属性

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\

当我尝试回显该值时,我收到一个异常。我用dd()检查集合,并且不为null

我的模型:

客户:

<?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
或循环访问所有客户。谢谢大家。选择*from
ordens\u servico
select*from
clients
where
clients
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>