Laravel-访问OneToMany关系上的属性时的非法偏移类型

时间:2018-08-28 14:44:05

标签: laravel eloquent relationship

我正在学习如何使用laravel和关系。我无法从hasMany关系访问数据,我知道这可能是一个愚蠢的问题。这可能是一个重复的问题,但是我没有找到任何类似的具体答案。

我有两个模型,一个销售员表和一个价格表表。一个推销员有很多价格表,所以像这样:

在Salesman模型上

<?php

namespace App\Pedidos;

use Illuminate\Database\Eloquent\Model;

class Vendedores extends Model
{
    protected $connection = 'Pedidos';
    protected $primaryKey = 'CD_VENDEDOR';

    public function TabelaDePreco() {
        return $this->hasMany('\App\Pedidos\TabelaDePreco', 'CD_VENDEDOR', 'CD_VENDEDOR');
    }
}

在价格表模型上

<?php

namespace App\Pedidos;

use Illuminate\Database\Eloquent\Model;

class TabelaDePreco extends Model
{
    protected $connection = 'Pedidos';
    protected $primaryKey = ['CD_VENDEDOR', 'CD_PRODUTO', 'CD_ESTADO'];

    public function Vendedores() {
        return $this->belongsTo('\App\Pedidos\Vendedores', 'CD_VENDEDOR', 'CD_VENDEDOR');
    }

}

在控制器上

public function index()
{
    $vendedores = Vendedores::all();
    return view('pedidos.tabeladepreco.index')
        ->with('title', 'Tabela de preços')
        ->with('vendedores', $vendedores);
}

在视图上,这将返回TabelaDePreco模型

@foreach($vendedores as $vendedor)
   @foreach ($vendedor->TabelaDePreco as $tabela)
       {{ dd($tabela) }}
   @endforeach

这是上面代码的印刷品: TabelaDePreco model

如您所见,数据已加载到$ tabela变量上。

如果我尝试在视图上打印 {{$ tabela-> NR_LIMITE1}} ,则会收到非法的偏移类型错误。由于使用dd()时已加载数据,如何访问此属性?我试过$ tabela ['NR_LIMITE1']但有相同的错误。

我在做什么错了?

最诚挚的问候。

编辑:

正如乔纳斯(Jonas)在评论中指出的那样,当其中一个表具有复合键时,Laravel将不支持关系。回到迁移。

1 个答案:

答案 0 :(得分:0)

您需要渴望建立您的关系:

$vendedores = Vendedores::with('TabelaDePreco')->all();

    return view('pedidos.tabeladepreco.index')
        ->with('title', 'Tabela de preços')
        ->with('vendedores', $vendedores);

如果没有与$vendedor->TabelaDePreco相关联的TabelaDePreco,也可能发生$vendedor未定义的情况。尝试添加isset()。如果您有很多条目,也可以进行分页。