Laravel 4一对多关系错误

时间:2013-08-07 17:18:27

标签: laravel laravel-4

我是laravel新手,我正在尝试遵循文档。所以我有两个模型,'用户'模型和'UserPhone'模型。用户有很多电话。

用户模型:

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

UserPhone型号:

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

在我的控制器上,我试图“复制”文档:

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

结果是错误:

  

尝试获取非对象的属性

我知道我在这里遗漏了一些东西,但我找不到它。

5 个答案:

答案 0 :(得分:1)

我很确定你没有id为1的用户。

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

这应该可行,但是,如果它没有找到用户的第一部分:

User::find(1)

我将返回NULL并且NULL不是对象,然后您收到错误:Trying to get property of non-object

我的建议是,尝试这样做

var_dump( User::find(1) );

如果你只收到一个NULL,你就会发现问题。

答案 1 :(得分:0)

如果您想使用相关电话号码(userPhone)获取用户,可以使用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的用户,则可以获取他的电话号码。否则,你得到一个空数组,没有异常/错误(试图获取非对象的属性)抛出。

答案 2 :(得分:0)

将自动为您加载该关系。

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

这假设您已根据laravel的约定正确设置了数据库表,并且您实际上拥有ID为1的用户。

答案 3 :(得分:0)

答案是答案一切正常! 我不小心离开了

 use Illuminate\Auth\UserInterface;
 use Illuminate\Auth\Reminders\RemindableInterface;
在UserPhone Model Class声明之前的

。这是一个新手的错误。

答案 4 :(得分:-3)

1)你在userPhone

之后缺少一对()
$userPhone = User::find(1)->userPhone();

2)您没有正确使用'find'方法。我想你想做的是:

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

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

'find'方法只返回一个对象,并尝试用它的id找到它。