【发布时间】:2020-05-28 10:30:45
【问题描述】:
我目前正在开发 laravel 框架,但遇到了一些关系和急切的加载问题。
情况
我有三个模型 A、B 和 C
我有两个关系
- A 有很多 B
- B 有很多 C
默认情况下(使用模型中的 $with 属性):
- A 不包括 B
- B 包括 C
所以大部分时间我都在使用没有 B 的 A 和使用 C 的 B
这是我设置关系方法和预加载的方式
class A extends Model {
...
protected $with = [];
public function bs() {
return $this->hasMany('App\Models\B');
}
}
class B extends Model {
...
protected $with = ['cs'];
public function cs() {
return $this->hasMany('App\Models\C');
}
public function a() {
return $this->belongsTo('App\Models\A');
}
}
class C extends Model {
...
public function b() {
return $this->belongsTo('App\Models\B');
}
}
问题
对于一个特定的任务,我想用所有 B 和没有任何 C 来查询 A
当我使用A::query()->with('b')时默认加载C
所以我正在尝试使用A::query()->with('b')->without('b.c')
但它一直在加载 B 到 C 的关系。
您对如何实现这一点有任何想法吗?
感谢您的帮助!
【问题讨论】:
-
你能准确地展示你的模型内部是什么样子 - 特别是你是如何设置关系方法的吗?
-
我更新了我的帖子
-
如果您使用受保护的 $with = ['cs'] 并且不想加载 b,则只需添加没有,如下所示 public function cs() { return $this->hasMany('应用\模型\C')->没有('b'); }
标签: laravel eloquent eager-loading eloquent-relationship