2013-08-07 80 views
0

我是laravel新手,我試圖按照文檔。所以我有兩個模型,'用戶'模型和'UserPhone'模型。用戶有很多電話。Laravel 4一對多關係錯誤

用戶模式:

public function userPhone() {  
    return $this->hasMany('UserPhone'); 
} 

USERPHONE型號:

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

在我的控制,我想 「複製」 的文檔:

$userPhone = User::find(1)->userPhone; 

那麼結果是一個錯誤:

Trying to get property of non-object

我知道,我在這裏失去了一些東西,但我不能找到它。

+0

您是否尊重數據庫中的Laravel約定?比如每個表有一個名爲'id'的主鍵並且外鍵名爲'foreigntable_id'? – Gab

回答

1

我敢肯定,你沒有一個用戶提供的1

$userPhone = User::find(1)->userPhone; 

ID這應該工作,但是,如果沒有找到用戶的第一部分:

User::find(1) 

我將返回一個NULL和NULL不是一個對象,那麼你會得到錯誤:Trying to get property of non-object

我的建議是,儘量如果您收到只是一個NULL做到這一點

var_dump(User::find(1)); 

而你,你發現了問題。

+0

非常感謝你的回答,但是如果你看下面,我已經回答了我自己的問題,這是一個新手的錯誤.. :) –

-3

1)你USERPHONE

$userPhone = User::find(1)->userPhone(); 

2後缺少對())你沒有使用 '查找' 方法正常。我想你想要做的是:

$userPhone = User::userPhone()->get(); 

$userPhone = User::find($phoneId); //where $phoneId is the id of the phone you are trying to find. 

「查找」方法返回了一個對象,並會嘗試找到它與它的ID。

+0

你能告訴我爲什麼我得到'unusefull答案',而不是隻是降低我? – Gab

0

如果您想使用其相關電話號碼(用戶電話)獲取用戶,您可以使用Eager Loading

//get all users (User) with their respective phonenumbers (userPhone) 
$users = User::with('userPhone')->get() 

//get User with id==1, with his related phonenumbers (userPhone of User(1)) 
$user_1 = User::with('userPhone')->where('id',1)->first() 

,比你可以做

if(!is_null($user)) 
$phones_of_user_1 = $user_1->userPhone(); 
else 
$phones_of_user_1 = array(); 

這樣,如果ID == 1的用戶存在,你拿他的電話號碼。否則,你會得到一個空數組,並且不會拋出異常/錯誤(試圖獲取非對象的屬性)。

0

該關係會自動爲您加載。

$user = User::find(1); 
echo $user->userPhone->id; 

這是假設你有你的數據庫表是正確根據laravel的慣例設置,你實際上有一個用戶用1

0

的ID那麼答案是,一切正常! 我不期而遇離開

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 

的USERPHONE模型類declaration..It之前,這樣一個新手的錯誤。