2017-03-06 48 views
0

Querybuilder object是否可以使用Laravel中的querybuilder进行加载?

正如人们可以在上面看到,有一个“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

显示相关的代码,请。 –

+0

这是可能的,看看文档[Eager Loading](https://laravel.com/docs/5.2/eloquent-relationships#eager-loading)文档。您遇到的错误与其他内容有关,您应该显示相关的代码,以使我们能够了解上下文。 – Desh901

+0

@ Desh901:感谢您指出这是可能的,因为几乎没有文档可以找到。我已经添加了一些代码示例,请确保让我知道缺少任何东西。 –

回答

0

据我了解,这是不可能使用预先加载,加载使用QueryBuilder的模型关系。 (因为querybuilder没有利用雄辩,它不知道关系) 如果有人知道这是(部分)不正确的,请让我知道。

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'); 
} 
相关问题