是否可以使用子查询作为belongsToMany 中的数据透视表?

问题描述

我的 Laravel 应用中有两个远程模型。关系如下所示:

A → 有很多 → B → 有很多 → C → 属于很多 → D

我想将其定义为 Eloquent 关系,但它对于 hasManyThrough 来说有点太遥远了,而且我目前无法使用 staudenmeir/eloquent-has-many-deep 这样的外部包来执行这个技巧。

C 和 D 之间已经有一个数据透视表,所以我认为可能可以自己在子查询中构建一个“虚拟”数据透视表并将其传递给关系。

类似于:

// model A
public function ds() {
    return $this->belongsToMany(
        D::class,function ($query) {
            $query->select('b.a_id as a_id','c_d.d_id as d_id')
                ->join('b','b.a_id','=','a.id')
                ->join('c','c.b_id','b.id')
                ->join('c_d','c_d.c_id','c.id');
        }
    );
}

这段代码不能工作,因为 belongsToMany 需要一个字符串作为第二个参数 table,但在 Eloquent 的某个地方,可能有一些魔法可以在幕后完成所有这些连接被利用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)