2016-12-24 15 views
0

私はちょうどLaravel(5.3)に入っていて、モデル/テーブル間のより複雑な関係を達成する方法を見つけようとしている私の頭の中で奇妙なシナリオを実行しています。Laravel/Eloquentとの複雑な関係

私の例では、連絡先アプリを構築しています。ユーザーには多くの連絡先があり、簡単です。よりトリッキーな部分は接触接続を定義することです。ユーザーが姉妹である2つの連絡先を持っているとします。ユーザーはこれら2つの連絡先を簡単に移動できるように接続することができます。ユーザーは連絡先に無制限の接続を割り当てることができます。

私は明らかにidとuser_idフィールドを持つ連絡先テーブルを持つusersテーブルをユーザに付与します。ユーザーは、複数の接続名を作成することもできます。 「姉妹」のように。ユーザーが新しい接続名を作成すると、後で先行入力などで簡単に同じ接続名を使用できるように、その接続名を保存します。したがって、connection_namesテーブルには、ユーザーに関連付けられたエントリがあります。

私は苦労しているテーブルは、実際の接続ピボットテーブルです。とにかくピボットテーブルだと思います。まだまったく新しい用語です。 図はちょっと言います。接続テーブルは基本的にすべてのIDが他のテーブルに接続しています。接続自体を確立する連絡先テーブルの2つのIDと、接続名のIDをもう1つ指定します。

まず、世界で私はLaravelの接続関係を雄弁に定義するためのモデルをどのように設定しますか?そして、私はできるか、より良くするべきか、よりきれいにするべきことがありますか? また、Laravel/Eloquentの名前付け規則を正しく実行すると、自動的にその一部または全部を選択できますか?

ありがとうございます! connections diagram

答えて

0

あなたが$connectionオブジェクトを持っているとContactオブジェクト(ホストまたは接続しているユーザ)にアクセスしたい場合は、あなたのようにbelongsToを使用することができます。

public function host() 
{ 
    return $this->belongsTo('App\Contact', 'contact_id'); 
} 

public function connection() 
{ 
    return $this->belongsTo('App\Contact', 'connection_id'); 
} 

そして、あなたはContactモデルのオブジェクトを持っている場合と、すべての接続にアクセスしたい場合はbelongsToManyの関係が必要です:

public function connection() 
{ 
    return $this->belongsToMany('App\Contact', 'connections', 'contact_id', 'connection_id'); 
} 

あなたの命名規則は正しく行われています。

+0

ありがとうございます!私はそのショットを与えるよ! – Mattaton

関連する問題