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

Posted

技术标签:

【中文标题】Laravel 与数据透视表的关系,关系?【英文标题】:Laravel Relation with Pivot Table, Relationships? 【发布时间】:2017-07-22 04:42:39 【问题描述】:

我有一个用户表和一个“地址”表。结账时可以输入多个地址供选择。

现在我希望能够将一个地址设置为标准发票地址,并将另一个地址设置为标准发票地址。我考虑过使用数据透视表,其中包含以下内容:

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 替换它,我只能获得标准发票和交货地址,而不是其他地址。有什么想法吗?

这是我目前的关系: 用户.php

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

地址.php:

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

【问题讨论】:

【参考方案1】:

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

在地址表中你只需要添加两列:“user_id”和“type”。 你写的关系很好。

【讨论】:

是的,你是对的。 1 赞成我的错误。 永远不会看到你犯了错误 Eddy,但你要投赞成票。希望这个答案能帮助@Scarwolf 但是等等。多对多意味着一个地址可能属于许多用户。这是错误的,因为这些是他们自己创建的地址。我只想添加一些东西,告诉我这个地址是他们的标准送货地址、标准发票地址,或者两者都不是。 你设计了一个数据透视表,数据透视表是多对多的。只需在地址表中添加两个布尔字段:发票和交货 是的,这听起来是最好的方法。谢谢!不是我的日子。

以上是关于Laravel 与数据透视表的关系,关系?的主要内容,如果未能解决你的问题,请参考以下文章

(Laravel)通过数据透视表的多态关系

数据透视表的laravel关系问题

laravel 使用具有多对多关系数据透视表的策略

是否可以在 Laravel 中获取数据透视表与另一个表的关系?

使用数据透视表数据获取关系表的信息

在数据透视表 laravel 中添加与附加值的关系