php 我如何在Laravel中将第二个关系写入同一个模型

cclgggtu  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(104)

我有两个模型,用户和社区。一个用户可以属于多个社区,而一个社区可以有多个用户。我已经在两个模型中实现了多对多关系,然后创建了一个数据透视表communities_users。在Community Model中,我定义了用户(成员)关系:

public function users(){
        return $this->belongsToMany('App\User', 'communities_users', 'community_id', 'user_id');
    }

在用户模型中,我将社区关系定义为:

public function communities(){
        return $this->belongsToMany('App\Community', 'communities_users', 'user_id', 'community_id');
    }

我可以称这些关系为好。没问题。但是,我需要在communities表中添加一个admin_id,表示创建社区的用户(指向相同的User模型)。我知道这将是Community模型中的belongsTo关系和User中的hasMany关系。我在社区表中添加了一个admin_id列。在我的社区模型中,我添加了我的管理员模型;

public function admin(){
        return $this->belongsTo('App\User', 'admin_id');
    }

如果我尝试返回这个,应用程序不断打破与500内部服务器错误。我怎样才能纠正这个错误并使它返回创建社区的用户对象呢?

vs91vp4v

vs91vp4v1#

belongsTo方法的第二个参数foreign_key
在社区模型中:

public function admin(){
        return $this->belongsTo('App\User'); //Laravel considers 'id' by default
    }

在用户模型中:

public function  adminOfCommunities(){
        return $this->hasMany('App\Community', 'admin_id');
    }
e4yzc0pl

e4yzc0pl2#

我想让我们一起从头开始完成这个数据库
你的数据库,因为我理解它如下(当然它的一部分)

!!但如果我不明白,改变关系就能解决问题
步骤1:在用户迁移中,使用ForeignId定义community_id

.
.
.
$table->foreignId('community_id')->constrained();
.
.
.

步骤2:在模型中使用has Many和belongs_To
模型用户

public function communities(){
    return $this->hasMany(App\Community::class, 'community_id', 'id');
}

模范社区

public function users(){
    return $this->belongsTo(App\User::class, 'community_id', 'id');
}

您可以为管理员模型执行相同的操作
!!如果我没有理解正确,你可以更改上面的连接,但一般工作与上面相同

相关问题