如何在同一模型上应用belongsTo和hasMany关系?
例如,我有一个User和一个Project模型。现在Project模型有方法user(),User模型有projects()方法。
现在我希望用户与其他用户共享项目。这样我就可以在Project模型中使用user()方法,在User模型中使用shared_projects()。
我如何实现这一目标?
这是我目前的项目模型
class Project extends \Eloquent {
protected $fillable = [];
public function user() {
return $this->belongsTo('User');
}
}
这是我的用户模型
class Project extends \Eloquent {
protected $fillable = [];
public function projects() {
return $this->hasMany('Project');
}
}
答案 0 :(得分:5)
在这种情况下,User和Project具有多对多关系,因为一个用户有很多项目,一个项目属于许多用户。因此,您应该创建第三个表(project_user),它连接数据库中的User表和Project表。 并将Many-to-Many relation设置为用户模型和项目模型。
class User extends Eloquent {
public function projects()
{
return $this->belongsToMany('Project');
}
}
在项目模型中
class Project extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
}
然后你可以做这样的事情
//users in the same project
$users = Project::find($id)->users;
答案 1 :(得分:1)
好的,所以这就是我解决它的方式。我按照你的建议使用了数据透视表,但我甚至像这样添加了hasMany关系。我仍然不确定我在做什么是完全正确但它有效。 :)
class User extends \Eloquent {
protected $fillable = [];
public function projects_owned() {
return $this->hasMany('Project', 'user_id');
}
public function projects() {
return $this->belongsToMany('Project');
}
}
这是用户模型中的关键要素
{{1}}