2017-03-02 54 views
0

私はユーザーテーブルと "アドレス"テーブルを持っています。彼らはチェックアウト時に選択する複数のアドレスを入力することができます。Laravelピボットテーブルとの関係、関係

標準の請求書アドレスとして1つのアドレスを設定し、標準の請求書アドレスとしてもう1つのアドレスを設定できます。ピボットテーブルを使用して、次の内容を含むことを考えました。

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

しかし、私は正しい方法があるかどうかはわかりません。それは私にとっては悪い習慣のように見えます。このオプションを選択すると、どのように関係を設定できますか?なぜなら私はユーザーから住所への2つの関係が必要だからです。私はすでに彼らを見渡すために1つを持っています。だから私がPivot Relationでそれを置き換えた場合、私は他のものの代わりに標準請求書&配送先を得ることしかできませんでした。何か案が?

これが私の現在の関係です: User.php:

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

Adress.php:

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

答えて

2

IMHOあなたは多くに多くを必要といけない、ピボットテーブルを使用していけないが、これは単純な1対多の関係(1人のユーザーには多数のアドレスがあります)。

アドレステーブルには、「user_id」と「type」の2つの列を追加するだけで済みます。 あなたが書いた関係は良いです。

+0

はい、あなたは正しいです。 1私の間違いを捕まえるためのアップアップ。 – EddyTheDove

+0

あなたは間違いをしていることは決してありません。この答えが@Scarwolfに役立つことを願っています – dparoli

+0

しかし、待ってください。多対多のwoudlは、多くのユーザーに属している可能性があることを意味します。それは間違っている。なぜなら、それらは自分自身で作成するアドレスだからだ。私はちょうどこのアドレスが標準配送住所か標準請求書住所のどちらかであることを私に知らせる何かを加えたいと思う。 – Scarwolf