Laravel属于并且在同一模型上有很多关系

时间:2015-07-03 02:07:38

标签: laravel

如何在同一模型上应用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');
    }
}

2 个答案:

答案 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}}