我有一个与标题相关的问题。 所以我有这个模型(如果你需要告诉我我有更多的代码和模型)
Cliente Model
protected $table = 'cliente';
protected $primaryKey = 'id_cliente';
public $timestamps = false;
public function seguroCarro()
{
return $this->hasMany('App\SeguroCarro', 'id_seguro_carro');
}
SeguroCarro模型
protected $table = 'seguro_carro';
protected $primaryKey = 'id_seguro_carro';
public $timestamps = false;
public function cliente()
{
return $this->belongsTo('App\Cliente', 'id_cliente');
}
问题:
此Cliente::find(1)->seguroCarro
获取id为1的seguro_carro而不是id_cliente 1,但此SeguroCarro::all()->where('id_cliente',Auth::user()->cliente->id_cliente)
获取我需要的3行seguro_carro
我不明白为什么会发生这种情况,但我想明白为什么
Atencion:
对于我的代码Cliente::find(1)->seguroCarro
[我的Auth :: user() - > cliente有id 1]
Auth::user()->cliente->seguroCarro
是你们的缩影
img of rows on seguro_carro table
谢谢你们的时间
答案 0 :(得分:1)
App\Cliente
模型上的关系指定了错误的密钥。 hasOne
/ hasMany
关系的第二个参数是相关对象上的外键字段的名称。在这种情况下,相关对象(App\SeguroCarro
)上的外键为id_cliente
,而不是id_seguro_carro
。
您当前的关系将获得seguro_carro
条记录where seguro_carro.id_seguro_carro = cliente.id_cliente
,这不是您想要的。
关系应改为:
public function seguroCarro()
{
return $this->hasMany('App\SeguroCarro', 'id_cliente');
}
这将获得seguro_carro
记录where seguro_carro.id_cliente = cliente.id_cliente
,这就是您想要的。
belongsTo
上的App\SeguroCarro
关系正确无误。