我已将profiles
方法添加到User
模型中,如下所示:
<?php
class User extends Eloquent {
protected $table = 'users';
protected $hidden = array('password', 'remember_token');
public function profiles()
{
return $this->hasMany('Profile');
}
}
但是,当我尝试使用这种关系时:
$profile = $user->profiles()->save($profile);
我收到以下错误:
Call to undefined method Illuminate\Database\Query\Builder::profiles()
为什么?
答案 0 :(得分:2)
它应该是这样的:
$profile = $user->profiles->first()->save($profile);
这是因为,$user->profiles()
会返回Profile
模型的集合,因为关系是hasMany
,而且在集合中(没有选择任何profile
模型)您无法调用save()
方法。
但错误并非如此,而是由于您使用了profiles()
而导致错误,它应该是profiles
。
顺便说一下,我认为您应该使用User
声明Profile
和hasOne
模型之间的关系,因为一个User
只能有一个Profile
所以它可以在User
模型中声明为这样:
public function profile()
{
return $this->hasOne('Profile');
}
因此,您可以像这样调用save()
方法:
$profile = $user->profile->save($profile);
在创建User
模型时,您应该实现两个接口,如下所示:
class User extends Eloquent implements UserInterface, RemindableInterface {
// Code ...
}
答案 1 :(得分:0)
在模型类中尝试此操作
使用Illuminate \ Auth \ UserInterface; 使用Illuminate \ Auth \ Reminders \ RemindableInterface;
class User extends Eloquent实现UserInterface,RemindableInterface { protected $ table =&#39; users&#39;;
protected $hidden = array('password', 'remember_token');
public function profiles()
{
return $this->hasMany('Profile');
}
}