我正在学习如何使用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将不支持关系。回到迁移。
答案 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()
。如果您有很多条目,也可以进行分页。