使用 Eloquent 个模型 [Laravel] 实现一元多对多关系

Implement Unary Many-to-Many Relation with Eloquent models [Laravel]

我如何实现一元多对多与Eloquent模型的关系

例如:如果存在关系用户可以向一个或多个用户发送好友请求

我知道我必须创建新模型,例如 user-request-user,新模型的 Primary Keys是 [user1_id , user2_id] 这就是我的想法

但是如何实现这个关系..

是的,亲爱的,就像普通的多对多关系一样,但有一点不同。 多对多关系的第一步是创建枢轴 table,因此您可以为枢轴 table 创建迁移。 pivot table 在正常的多对多关系中属于两个 table 但此 pivot table 属于单个 table.if 您创建 pivot table name "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();

    });
}

现在你应该有两个模型,一个 "User" 和另一个你已经有的 "user-request-user"。两个模型都应指向相同的 table,即 "users"。默认情况下,用户模型指向用户 table 但你写了一个 属性 $table 用于指向 "users" table 用于 "user-request-user" 模型所以

protected $table = 'users';

在用户模型中,您只需编写一个简单的方法,就像在任何其他多对多关系中写入一样...所以

public function request(){
    return $this->belongsToMany('App\user-request-user', 'friend_request_user','user_id', 'request_user_id');
}

"belongsToMany" 函数的第一个参数是关系模型,第二个是数据透视表 table 名称,第三个是外键,第四个是数据透视表中使用的其他键 table。我们写这些参数只是因为在这种情况下不遵循 laravel 语法。这就是全部,现在只需像

一样调用此函数
Auth::user()->request;

您可能还喜欢使用可以在其他模型上编写的相反函数"user-request-user",但这只是为了您的需要。

public function nameOfFunction(){
    return $this->belongsToMany('App\User', 'friend_request_user', 'request_user_id', 'user_id');
}