【问题标题】:HasOne relationship in laravel with a "through" tablelaravel 中的 HasOne 关系与“通过”表
【发布时间】:2020-10-19 22:18:36
【问题描述】:

我目前在人际关系方面遇到问题。

我有 3 张桌子:

  • 派系:
    • 身份证
  • 角色:
    • 身份证
  • 派系角色:
    • faction_id
    • role_id

每个派系都有很多角色,但每个角色只有一个派系。我已经考虑在我的角色表中创建一个 faction_id 列,但我想只用 faction_roles 来解决它,所以我不必向 2 个表添加数据。

我的榜样是这样的:

 public function faction()
 {
    return $this->hasOne(Faction::class, 'faction_roles.faction_id', 'faction_roles.role_id');
 }

我已经用 $this->belongsTo(Faction::class) 尝试过,但效果不佳。

提前致谢!

干杯

【问题讨论】:

    标签: php laravel eloquent relationship laravel-8


    【解决方案1】:

    如果你像在 Faction 模型中那样定义关系,我看不出问题:

    public function factions() {
        return $this->belongsToMany(Faction::class);
    }
    

    那么relationship方法会返回一个item,你可以这样查询relationship的第一个元素:

    $role->factions->first();
    

    或者:

    $role->factions()->first();
    

    Eager loading for the difference

    你还需要什么?

    【讨论】:

    • 但它不属于许多派别,只属于一个派别。那么有没有办法让 $role->faction 工作而无需获得角色集合而只获得 1 个角色?
    • 但事实是它确实属于许多人,因此解决方法可能是创建另一个仅返回角色派系但不会被视为关系的类方法。跨度>
    • 我想我找到了使用访问器的解决方法。所以返回 $role->factions->first()。这至少清理了我的代码。谢谢你的回答:)
    • 好吧,有什么需要就回来,请投票或将答案标记为正确:)
    猜你喜欢
    • 2020-03-04
    • 2020-10-06
    • 2018-09-12
    • 2018-05-29
    • 2017-04-21
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多