m:m上的1:1变体Laravel 5.5中的雄辩关系:示例是否有效?

问题描述 投票:0回答:2

我试图通过orgperson()指定一个1:1的关系,尽管现有关系的m:m性质是orgs(),所以我可以急于加载一个默认组织。

我有以下对象,每个对象都有一个表:

  • 人物模型 - 重要说明,defaultOrgID存在于人身上
  • 组织记录
  • 将两个(orgperson)与其他字段连接的枢轴

我的“jerry-rigging”,如orgperson()函数所示,是否有效?

如果没有,那会有什么接近的吗?

在Person模型中,相关关系如下:

    // many-to-many relationship from person to orgs via org-person table
    public function orgs()
    {
        return $this->belongsToMany(Org::class, 'org-person', 'personID', 'orgID');
    }

    // "pivot table" with additional fields
    public function orgperson()
    {
        return $this->belongsTo(OrgPerson::class, 'personID', 'personID')
            ->where([
                ['orgID', $this->defaultOrgID],
                ['personID', $this->personID]
            ]);
    }
php laravel model relationship
2个回答
0
投票

既然你已经定义了你的关系'orgs',那么更好的方法是:

public function orgperson()
    {
        return $this->orgs()
            ->where("orgID", '=', $this->defaultOrgID)
            ->where("personID", '=', $this->personID);       

    }

0
投票

事实证明,这就像我希望的那样简单。

我的中间表(组织人员)已被定义为模型。我玩弄了它的类扩展Pivot而不是Model,但最后,我坚持使用Model。

有效的代码(我的Person模型上的关系):

public function orgperson()
{
    return $this->hasOne(OrgPerson::class, 'personID', 'personID')
        ->where('orgID', $this->defaultOrgID);
}

这让我获得了能够让这种关系根据defaultOrgID中的值从数据透视表中的多个记录返回单个条目的预期结果。

我的问题是使用“belongsTo”而不是“hasOne”。

© www.soinside.com 2019 - 2024. All rights reserved.