正如上面所示,有一个'eagerLoad'部分,querybuilder接受调用$query->with('relation')
但产生以下错误:Method addEagerConstraints does not exist.
我试图在这个问题上找到一些文件,但没有找到太多。在这种情况下,是否可以使用急切加载?如果是这样,有人能说出来吗?
更新
有些人指出这是可能的,错误是由我的代码中的另一个错误引起的。以下是一些示例:
// Querybuilder
$query->select([
'persons.id as alumni_id',
...
]);
$query->where('...'); // Based on search parameters
$query->groupBy('alumni_id');
$query->with('relation');
$result = collect($query->get());
// Model
public function relation()
{
// Note: relation does have a column person_id
return $this->hasMany(Relation::class, 'person_id', 'alumni_id')->get();
}
制作
BadMethodCallException in Macroable.php line 81: Method addEagerConstraints does not exist.
答案 0 :(得分:1)
据我所知,不可能使用预先加载来加载与查询构建器的模型关系。 (因为查询构建者没有利用Eloquent,它不知道关系) 如果有人知道(部分)不正确,请告诉我。
答案 1 :(得分:0)
这应该有效
// Querybuilder
$query->select([
'persons.id as alumni_id',
...
]);
$query->where('...'); // Based on search parameters
$query->groupBy('alumni_id');
$query->with('relation');
$result = $query->get(); // already returns a collection
// Model
public function relation()
{
// Note: relation does have a column person_id
// A relation should return an Eloquent object (HasMany in this case), not a collection
return $this->hasMany(Relation::class, 'person_id', 'alumni_id');
}