关系一对多只有一方工作

时间:2016-05-13 17:44:40

标签: laravel laravel-5 eloquent laravel-5.2

我有一对一的关系不在一边工作。

我的桌子

`seguro_carro` (
  `id_seguro` INT NOT NULL AUTO_INCREMENT,
  `matricula` VARCHAR(8) NOT NULL,
  `validade` DATE NOT NULL,
  `preco` DECIMAL(12,3) NOT NULL,
  `tipo_seguro` INT NOT NULL,
  `cliente` INT NOT NULL
)

`tipo_seguro_carro` (
  `id_tipo_seguro` INT NOT NULL AUTO_INCREMENT,
  `descricao` VARCHAR(50) NOT NULL
)

型号: SeguroCarro.php

public function tipoSeguro()
{
    return $this->belongsTo('App\TipoSeguroCarro', 'id_tipo_seguro');
}

TipoSeguroCarro.php

public function seguros()
{
    return $this->hasMany('App\SeguroCarro','tipo_seguro');
}

我可以TipoSeguroCarro::find(x)->seguros而不是像SeguroCarro::find(x)->tipoSeguro

这样的另一方

我无法理解为什么会这样。 某人?

感谢

1 个答案:

答案 0 :(得分:0)

您应该传递tipo_seguro属性而不是id_tipo_seguro,因为您的外键在两个关系中都是tipo_seguro

由于请求而导致的一些解释:

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_belongsTo
BelongsTo belongsTo( string $related, string $foreignKey = null, string $otherKey = null, string $relation = null)

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_hasMany
HasMany hasMany( string $related, string $foreignKey = null, string $localKey = null)

belongsTohasMany都接受第二个参数作为外键。所以基本上,你有两个涉及的领域 - 第一个是你的主键(id_tipo_seguro),第二个是外键(tipo_seguro)。如前所述,两种方法都接受外键作为第二个参数。