我是laravel新手,我正在尝试遵循文档。所以我有两个模型,'用户'模型和'UserPhone'模型。用户有很多电话。
用户模型:
public function userPhone() {
return $this->hasMany('UserPhone');
}
UserPhone型号:
public function user(){
return $this->belongsTo('User');
}
在我的控制器上,我试图“复制”文档:
$userPhone = User::find(1)->userPhone;
结果是错误:
尝试获取非对象的属性
我知道我在这里遗漏了一些东西,但我找不到它。
答案 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找到它。