2017-03-02 219 views
0

我有一個用戶表和「地址」表。他們可以在退房時輸入多個地址進行選擇。Laravel與樞軸表的關係,關係?

現在我希望能夠將一個地址設置爲標準發票地址,將另一個地址設置爲標準地址。我想使用一個數據透視表來做,它包含以下內容:

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(); 
    }); 

但是我不確定這是否是正確的方法。這對我來說看起來有點像一個不好的習慣。如果我選擇這個選項,我該如何設置關係?因爲我需要兩個從用戶到地址的關係。我已經有了一個爲了在視圖中對他們進行宣傳。所以如果我用樞軸關係替換它,我只能得到標準發票&,而不是其他人。任何想法?

這是我目前的關係: user.php的:

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

Adress.php:

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

回答

2

恕我直言不使用數據透視表,你不需要一個多對多的,這是簡單的一對多關係(一個用戶有很多地址)。

在地址表中,您只需添加兩列:「user_id」和「type」。 你寫的關係很好。

+0

是的你是對的。 1 upvote爲抓住我的錯誤。 – EddyTheDove

+0

從來沒有看到你做錯了漩渦,但ty爲upvote。希望這個答案可以幫助@Scarwolf – dparoli

+0

但是等等。多對多意味着地址可能屬於許多用戶。這是錯誤的,因爲那些是他們自己創造的地址。我只想添加一些內容,告訴我這個地址是他們的標準收貨地址,標準發票地址,兩者都不是。 – Scarwolf