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

Laravel属于同一模型,并且在同一模型上有许多关系,laravel,Laravel,你如何在同一个模型上应用belongsTo和hasnowrelations 例如,我有一个用户和一个项目模型。现在项目模型有方法user(),用户模型有方法projects() 现在我想让一个用户与其他用户共享项目。这样我就可以在项目模型中有像users()这样的方法,在用户模型中有像shared_projects()这样的方法 我怎样才能做到这一点 这是我当前的项目模型 class Project extends \Eloquent { protected $fillable = []

你如何在同一个模型上应用belongsTo和hasnowrelations

例如,我有一个用户和一个项目模型。现在项目模型有方法user(),用户模型有方法projects()

现在我想让一个用户与其他用户共享项目。这样我就可以在项目模型中有像users()这样的方法,在用户模型中有像shared_projects()这样的方法

我怎样才能做到这一点

这是我当前的项目模型

class Project extends \Eloquent {
    protected $fillable = [];

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

public function users()
{
    return $this->belongsToMany('User');
}

}
这是我的用户模型

class Project extends \Eloquent {
    protected $fillable = [];

    public function projects() {
        return $this->hasMany('Project');
    }
}
class User extends \Eloquent {
    protected $fillable = [];

    public function projects_owned() {
        return $this->hasMany('Project', 'user_id');
    }

    public function projects() {
        return $this->belongsToMany('Project');
    }
}

在这种情况下,用户和项目具有多对多关系,因为一个用户有多个项目,而一个项目属于多个用户。因此,您应该创建第三个表(project_user),连接数据库中的用户表和项目表。 然后设置为用户模型和项目模型

class User extends Eloquent {

public function projects()
{
    return $this->belongsToMany('Project');
}

}
项目内模型

class Project extends \Eloquent {
    protected $fillable = [];

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

public function users()
{
    return $this->belongsToMany('User');
}

}
然后你可以做这样的事情

//users in the same project
$users = Project::find($id)->users;

好的,我就是这样解决的。我按照您的建议使用了pivot表,但我甚至添加了许多这样的关系。我仍然不确定我所做的是完全正确的,但它起了作用。:)

这是用户模型的关键要素

class Project extends \Eloquent {
    protected $fillable = [];

    public function projects() {
        return $this->hasMany('Project');
    }
}
class User extends \Eloquent {
    protected $fillable = [];

    public function projects_owned() {
        return $this->hasMany('Project', 'user_id');
    }

    public function projects() {
        return $this->belongsToMany('Project');
    }
}

您的表结构是什么样子的?projects表有'id','project\u name','user\u id',而users表有'id','username','password'嘿,谢谢,但这样做我会失去用户模型中projects方法的许多关系。现在,在您的两个模型中使用
belongTomany
关系,请看我的答案缺少的元素是更改方法名称并传递“foreign_key”。还有另一种方法可以做到这一点。您可以在project_user表中创建一个新列,例如(onwer BOOL),并使用where('owner',true)检索拥有该项目的用户。是的,但我尝试了我的方法,并且工作得非常完美,不过感谢您的建议,请记住这一点。:)