Laravel 5 预加载不工作
Laravel 5 Eager Loading not working
我看了很多搜索结果都遇到了这个问题,但我无法让它工作。
用户模型:
<?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)->Person->first_name 它的工作。我可以从用户模型中获取人员关系。
但是.. User::with('Person')->get() 失败并调用未定义的 方法 Illuminate\Database\Query\Builder::Person()
我做错了什么?我需要所有用户及其个人信息的集合。
您必须将关系方法声明为 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
.
的原因
我看了很多搜索结果都遇到了这个问题,但我无法让它工作。
用户模型:
<?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)->Person->first_name 它的工作。我可以从用户模型中获取人员关系。
但是.. User::with('Person')->get() 失败并调用未定义的 方法 Illuminate\Database\Query\Builder::Person()
我做错了什么?我需要所有用户及其个人信息的集合。
您必须将关系方法声明为 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
.