Laravel与数据透视表的关系,关系?

时间:2017-03-02 12:35:47

标签: laravel pivot-table relationship

我有一个用户表以及一个“地址”表。结账时,他们可以输入多个地址进行选择。

现在,我希望能够将一个地址设置为标准发票地址,另一个设置为标准发票地址。我想过使用数据透视表来完成它,包含以下内容:

Schema::create('users_adresses_pivot', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->integer('invoice_adress_id')->unsigned();
        $table->foreign('invoice_adress_id')->references('id')->on('adresses');
        $table->integer('delivery_adress_id')->unsigned();
        $table->foreign('delivery_adress_id')->references('id')->on('adresses');
        $table->timestamps();
    });

但是我不确定这是不是正确的方法。对我来说这看起来有点像坏习惯。如果我选择此选项,我该如何设置关系?因为我需要从用户到地址的两个关系。我已经有了一个,以便在视图中预先通过它们。因此,如果我用Pivot Relation替换它,我只能得到标准发票和&交付地址而不是其他人。有什么想法吗?

这是我目前的关系: user.php的:

public function adresses()
    {
        return $this->hasMany('App\Adress');
    }

Adress.php:

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

1 个答案:

答案 0 :(得分:2)

恕我直言不使用数据透视表,你不需要多对多,这是一个简单的一对多关系(一个用户有很多地址)。

在地址表中,您只需要添加两列:" user_id"和"键入"。 你写的关系很好。