在与Laravel

时间:2018-04-09 19:45:22

标签: laravel

TL; DR

使用Laravel 5.6,我需要为多对多关系添加一对多关系。

我想知道我是否需要另一种关系,如果是这样的话怎么做。或者,如果我可以使用具有额外属性的现有数据透视表?

更多详情

many-to-many relationship with pivot

我的数据透视表中的屏幕截图显示了我如何管理我的连接(又名"朋友"):当两个联系人都已接受连接时,状态等于1.到目前为止很好,Laravel中的多对多关系系统完美地管理着,一切都很好。

但是现在,我想添加一个"最喜欢的"系统到这些连接,一个用户可以添加另一个用户作为最喜欢的联系人,但这显然不一定是一种共同的感觉,情况可能最终会像这样:

many-to-many relationship with pivot and attribute

当然,与两个支点的多对多关系并不会返回任何内容,因为 已加星标的 字段没有相同的值在两个记录上。当我将第二条记录更新为" 1"同样,关系也正确返回。

有没有办法使用枢轴(状态)和简单的额外属性(已加星标)来使用该表,或者我是否需要另一个在其他地方建立关系? (以及如何以最好的方式做到这一点?)

1 个答案:

答案 0 :(得分:1)

使用以下数据创建星形表

Schema::create('starrings', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id');
            $table->unsignedInteger('starred_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('starred_id')->references('id')->on('users')->onDelete('cascade');

        });
在您的用户模型上

,添加以下内容:

    public function starred(){
        return $this->hasMany('App\Starring','starred_id');
    }
    public function starrings(){
        return $this->hasMany('App\Starring','user_id');
    }