2015-03-13 154 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