是的,亲爱的,就像普通的多对多关系一样,但有一点不同。
多对多关系的第一步是创建数据透视表,以便为数据透视表创建迁移。数据透视表属于正常多对多关系中的两个表,但该数据透视表属于单个表。如果您创建数据透视表名称“friend_request_user”,那么这里是迁移
public function up()
{
Schema::create('friend_request_user', function(Blueprint $table)
{
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('request_user_id')->unsigned()->index();
$table->foreign('request_user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
}
现在您应该有两个模型,一个是“用户”,另一个是“用户请求用户”。两个模型都应该指向同一个表,即“用户”。默认情况下,用户模型指向用户表,但是您为“用户请求用户”模型编写了一个属性 $table 来指向“用户”表,所以
protected $table = 'users';
在用户模型中,您只需编写一个简单的方法,就像在任何其他多对多关系中编写一样......所以
public function request(){
return $this->belongsToMany('App\user-request-user', 'friend_request_user','user_id', 'request_user_id');
}
“belongsToMany”函数的第一个参数是关系模型,第二个是数据透视表名称,第三个是外键,第四个是数据透视表中的其他键使用。我们写这些参数只是因为在这种情况下不遵循 laravel 语法。就是这样,现在只需像
一样调用这个函数
Auth::user()->request;
您可能还喜欢使用相反的功能,可以在其他模型“用户请求用户”上编写,但这只是您的需要。
public function nameOfFunction(){
return $this->belongsToMany('App\User', 'friend_request_user', 'request_user_id', 'user_id');
}