【问题标题】:Implement Unary Many-to-Many Relation with Eloquent models [Laravel]使用 Eloquent 模型实现一元多对多关系 [Laravel]
【发布时间】:2015-04-05 21:12:34
【问题描述】:

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

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

的关系

我知道我必须创建像 user-request-user 这样的新模型,例如,新模型的 Primary Keys 将是 [user1_id , user2_id ] 我是这么认为的

但是如何实现这种关系呢..

【问题讨论】:

    标签: database laravel relational-database models


    【解决方案1】:

    是的,亲爱的,就像普通的多对多关系一样,但有一点不同。 多对多关系的第一步是创建数据透视表,以便为数据透视表创建迁移。数据透视表属于正常多对多关系中的两个表,但该数据透视表属于单个表。如果您创建数据透视表名称“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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 2019-06-13
      • 2016-08-25
      • 2021-04-21
      • 2020-03-27
      • 2015-11-10
      • 2017-11-03
      相关资源
      最近更新 更多