问题描述
我的 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 (将#修改为@)