2013-06-02 60 views
6

我試圖在'用戶'表和'User_profiles'表之間建立一個非常直接的關係。每個用戶都有一個user_profile,因此它是一個簡單的一對一的。由於每@http://four.laravel.com/docs/eloquent#one-to-one我已經添加了以下功能到我的用戶模型中發現的文檔:Laravel 4雄辯的ORM通過動態屬性訪問一對一的關係

public function user_profile() 
{ 
    return $this->hasOne('User_profile'); 
} 

,這是我的User_profile模型中定義的關係:我從試圖訪問

public function user() 
{ 
    return $this->belongsTo('User'); 
} 

像這樣的控制器:

// Get current user 
    $user = User::find(Auth::user()->id); 
    $profile = $user->user_profile; 

    print_r($user); 
    print_r($profile); 

    echo "User's name is: " . $user->user_profile->first_name . ' ' . $user->user_profile->last_name; 

不幸的是,打印$ user打印出用戶模型字段就好,但沒有顯示關係的任何痕跡; $配置文件是空的。 '關係'數組也是空的,我猜可能應該填充。

我試圖用「動態屬性」這裏建議http://four.laravel.com/docs/eloquent#dynamic-properties

否則,如果我只是去:

echo "User's name is: " . $user->user_profile()->first()->first_name . ' ' . $user->user_profile()->first()->last_name; 

它的工作原理..但我真的不喜歡有這樣做。

有什麼建議嗎?

回答

7

好的,所以問題必須在類名中使用下劃線。 Laravel按照here的概述遵循PSR 0和1。

這是什麼意思是我不得不命名我的模型類和文件名UserProfile(即使我的MySql表命名仍然'user_profiles'),然後更新我的用戶模型有一個名爲userProfile()的函數。

一旦我更新的命名,我可以做一些像自動訪問的關係:

$user = Auth::user(); 
echo $user->userProfile->first_name; 
+1

我愛L4但這方面必須趕的人很多了。我有一個類似的問題,但在我的情況下,它與產品類型有關,事實證明我必須命名關係方法'productType()'而不是'producttype()'。感謝發佈,希望它可以幫助其他幾個人。 – JamesG

+0

是的,再加上令人討厭的是重命名發生在諸如表格及其相關表格之類的對象上,但最終會回到表格字段本身的下劃線命名,即first_name。這種不一致是輕度刺激。 – John