2015-03-13 117 views
0

我看着许多搜索结果出现这种麻烦,但我无法让它工作。Laravel 5 Eager Loading无法正常工作

用户模型

<?php namespace Module\Core\Models; 

class User extends Model { 

(...) 

protected function Person() { 
    return $this->belongsTo('Module\Core\Models\Person', 'person_id'); 
} 

(...) 

而且角色模型

<?php namespace Module\Core\Models; 

class Person extends Model { 

(...) 

protected function User(){ 
    return $this->hasOne('Module\Core\Models\User', 'person_id'); 
} 

(...) 

现在,如果我使用用户::发现(1) - >人 - > FIRST_NAME其工作。我可以从用户模型中获得人员关系。

但是... 用户::使用( '人') - >得到()失败,并调用未定义的方法照亮\数据库\查询\生成器::人()

什么即时做错了?我需要收集所有用户的个人信息。

+0

我不确定这是否是问题,但是您应该将您的关系方法声明为公共' – lukasgeiter 2015-03-13 15:45:06

+0

并且...它的解决方案..谢谢lukasgeiter! – 2015-03-13 17:03:40

回答

1

您必须声明关系方法为public

这是为什么?让我们来看看with()方法:

public static function with($relations) 
{ 
    if (is_string($relations)) $relations = func_get_args(); 

    $instance = new static; 

    return $instance->newQuery()->with($relations); 
} 

由于该方法是从静态的背景下,不能仅仅调用$this->Person()调用。相反,它会创建一个模型的新实例并创建一个查询构建器实例,并在其上调用with等。最后,关系方法必须可以从以外的模型访问。这就是为什么可见度需要为public