【问题标题】:relationship one to many only working one side一对多的关系只在一侧工作
【发布时间】:2016-05-13 17:44:40
【问题描述】:

我有一对多的关系,但不是在一边工作。

我的桌子

`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那样做另一边

我不明白为什么会这样.. 有人吗?

谢谢

【问题讨论】:

    标签: laravel laravel-5 eloquent laravel-5.2


    【解决方案1】:

    您应该传递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)。如前所述,这两种方法都接受外键作为第二个参数。

    【讨论】:

    • 但在我的表中,tipo_seguro_carro 是 id_tipo_seguro 主键。为什么我在两种关系中都传递了tipo_seguro?我有更多一对多,比如用户有一个或多个 SeguroCarro,在关系中我说hasMany('App\SeguroCarro', 'cliente');belongsTo('App\Cliente', 'id_cliente');
    • @syszen 我更新了我的答案,看看。如果还有什么不清楚的地方,那就写吧。
    • @Giendrius Kirsys 好的,但是我从 SeguroCarro 表的视图中连接的关键是 TipoSeguroCarro 上的 id_tipo_seguro,不是吗?这就是为什么我很困惑,为什么其他关系有效但不是这个?
    • @syszen 真正的问题是:您的其他关系是否正常工作。 tipo_seguro_carro 表中没有外键,只有主键。你的外键在seguro_carro的两个关系“结束”中。
    • @Giendrius Kirsys 你能重新回答一下吗?想象一下,我有一个用户有很多帖子,用户有 'id_user' 并且帖子有一个外键 'fk_user' ,所以关系 belongsTo 和 hasMany 外键都是 fk_user?
    猜你喜欢
    • 2018-08-06
    • 2021-07-25
    • 2021-10-27
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2020-06-25
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多