雄辩的一对多问题

时间:2016-04-01 00:30:14

标签: laravel orm eloquent laravel-5.2

我有一个与标题相关的问题。 所以我有这个模型(如果你需要告诉我我有更多的代码和模型)

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

谢谢你们的时间

1 个答案:

答案 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关系正确无误。

相关问题