0

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

用户型号:

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

用户电话型号:

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

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

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

那么结果是一个错误:

试图获取非对象的属性

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

4

5 回答 5

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,你就发现了问题。

于 2013-08-07T21:46:33.643 回答
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 的用户,您就可以获取他的电话号码。否则,您会得到一个空数组,并且不会抛出异常/错误(试图获取非对象的属性)。

于 2013-08-08T09:46:32.900 回答
0

这种关系会自动为您加载。

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

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

于 2013-08-08T12:25:54.223 回答
0

那么答案是一切都很好!我不小心离开了

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

在 UserPhone 模型类声明之前..这是一个新手错误。

于 2013-08-08T23:43:50.567 回答
-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.

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

于 2013-08-07T21:37:02.930 回答