Laravel 5 Eager Loading不工作

时间:2015-03-13 15:39:55

标签: php loading laravel-5 eager

我看了很多搜索结果,但是我无法解决这个问题。

用户模型

<?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');
}

(...)

现在,如果我使用User :: find(1) - &gt; Person-&gt; first_name它的工作。我可以从用户模型中获得人员关系。

但.. User :: with('Person') - &gt; get()失败, 调用未定义的方法Illuminate \ Database \ Query \ Builder ::人()

我做错了什么?我需要所有用户的集合及其个人信息。

1 个答案:

答案 0 :(得分: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,依此类推。最后,必须可以从 outside 模型访问关系方法。这就是为什么可见性需要public