有没有办法在Laravel查询构建器中通过两个连接的枢纽表进行hasManyThrough?

时间:2019-07-14 16:58:36

标签: laravel eloquent pivot-table query-builder has-many-through

我真的希望你们中的一些聪明人可以帮助我解决薪资等级以上的问题;)

在以下情况下,如何找到连接到某个Subpart的所有用户?

任何人都有见解吗?甚至这是否确实可以解决当前的问题?

给出:

  • 项目具有元素。 n:m
  • 元素具有子部分。 n:m
  • 可以将用户分配给项目(我称这为分配)。 m:m
  • 还可能会将用户分配给项目中分配给他们的元素的一个或多个子部分(AssignmentSubpart)。 m:m
  • Assignment和AssignmentSubpart枢轴具有额外的属性和功能,因此它们被制成扩展Pivot的模型。

我选择加入两个数据透视表,因为可以将用户分配给项目而无需分配给子部分 。每个用户最终都将被分配到一个或多个子部分,但是我需要“常规”信息,例如约束和费用(保存在“分配”模型上),以与每个Subpart-Talent连接一起出现。

我的表格(简体)

项目: ID

元素: id,project_id

子部分: ID,element_id

用户: ID

分配:id,project_id,user_id,已归档,约束,费用

assignments_subparts: id,assignment_id,subpart_id,说明

我尝试过的事情

通常,我会使用从Subpart到Talent的更简单的hasManyThrough,但是由于我实际上是在联接两个数据透视表(assignment和assignemnts_subparts),因此无法正常工作。我似乎没有超过Assignment模型的ManyThrough。

我看过Steidenmeir的has-man-deep软件包,但是我没有最清楚的线索来知道如何设置正确的ID和外键数组...

我的模特

class Project extends Model
{
    public function elements()
    {
        return $this->hasMany(Element::class);
    }

    public function subparts()
    {
        return $this->hasManyThrough(Subpart::class, Element::class);
    }

    public function users()
    {
        return $this->belongsToMany(User::class, 'assignments')->using(Assignment::class)->as('assigns')->withPivot(['id', 'archived']);
    }
}


class Assignment extends Pivot
{
    public function user()
    {
        return $this->belongsTo(Users::class);
    }

    public function project()
    {
        return $this->belongsTo(Project::class);
    }

    public function subparts()
    {
        return $this->belongsToMany(Subpart::class, 'assignments_subparts', 'assignment_id', 'subpart_id')->using(AssignmentSubpart::class)->as('assignsubpart');
    }
}


class AssignmentSubpart extends Pivot
{
    //
}


class Subpart extends Model
{
    public function element()
    {
        return $this->belongsTo(Element::class, 'element_id');
    }

    public function assignments()
    {
        return $this->belongsToMany(Assignment::class, 'assignments_subparts', 'subpart_id', 'assignment_id')->using(AssignmentSubpart::class)->as('assignsubpart');
    }

    // 
    // And here is the part I need working:
    //

    public function users()
    {
        return null; 
    }
}

0 个答案:

没有答案