我看了很多搜索结果,但是我无法解决这个问题。
用户模型:
<?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 ::人()
我做错了什么?我需要所有用户的集合及其个人信息。
答案 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
。