2015-11-02 64 views
1

我在Laravel 5.工作我的情況是下一個:我有一個表USERS和一張桌子PROFILES的有關係1:1。所以,我在模型用戶一個名爲輪廓像這樣的方法:錯誤試圖讓非對象的屬性在Laravel 5關係和範圍

public function profile(){  
     return $this->belongsTo('App\models\Profile','profile_id'); 
    } 

另外我有一個方法scopeData在這裏我要過濾哪些用戶有identity_doc等於爲數據

public function scopeData($query,$data){ 
     $profile=$this->profile; 
     $query->where($profile->identity_doc,$data); 
    } 
在我使用範圍功能在這條線的用戶控制器

$students= Users::data($request->get('data'))->where('rol','=','Student')->get(); 

但是,當我運行它時,我有這個錯誤:試圖獲得非對象的屬性 所以,爲什麼會發生?輪廓方法在其他功能工作正常,但沒有在這裏,我得到:

**array('query' => object(Builder), 'data' => 'example', 'profile' => null))** 

回答

1

如果我的口才ORM的記錯的話,當你使用它增加了查詢的範圍,這意味着你在構建查詢的過程中,您還沒有實際查詢數據庫。但是,關係(例如->belongsTo(...))似乎適用於實例化的對象 - 即它們在之後工作,您已完成從數據庫中獲取它們的操作。

因此,在您的範圍內,您的用戶實際上並不存在。 $this不是您範圍內的用戶,因此$this->profile不會返回任何內容 - 查詢尚未運行,因此它沒有用戶,因此也可能沒有配置文件。那麼,因爲$profile爲空,訪問$profile->indentity_doc將導致你得到的錯誤。

+0

好吧,我明白了,我雖然一樣,但我不確定。謝謝你,兄弟!那麼,是否存在處理這種情況的方法?我如何使用範圍內的關係? –

+0

好好加載可能是您解決方案的一部分:http://laravel.com/docs/5.0/eloquent#eager-loading。 例如Users :: with('profile') - 至少可以讓你在某個地方。我並不完全清楚你想用 - > identity_doc部分實現的目標。你能解釋更多嗎? – Octo

+0

當然,問題是我在視圖中有一張桌子,並且在那裏顯示了用戶個人資料的一些數據,如姓名,身份證件,電話號碼等。但是我有一個_input text_,用戶可以在其中引入一些價值並找到重合的寄存器,他可以找到護照或身份證號碼。然後用那個_data_我試圖過濾寄存器,並向用戶顯示結果 –

相關問題