2017-03-06 15 views
1

私はEloquentでこれをどのように処理するか考えることはできません。私はそれに割り当てられた1対1の関係を必要とする多対多の関係を持っています。LARAVEL:ピボットテーブルの1対1の関係ですか?

ACCOUNTS: id 

AGENTS: id 

FEES: id 

ACCOUNT_AGENT: account_id, agent_id, fee_id 

各アカウントbelongsToManyエージェント:

は、ここで私はその最も単純な形で設計された基本的なデータベース構造です。

各エージェントbelongsToManyアカウント。

各 "Account_Agent"(多対多のピボットテーブル)は、所有料になります。

Eloquentモデルで第3の関係を定義するにはどうすればよいですか?

私はこの(または類似)のような「account_agent」の料金にアクセスできるようにしたい:

$account = Account::first(); 

foreach ($account->agents as $agent) { 
    echo $agent->fee; 
} 

おかげで、うまくいけば、私の質問は明らかです。

+0

これは参考になるかもしれません:http://stackoverflow.com/questions/30649810/three-way-many-to-many-relationship-in-laravel – Samsquanch

答えて

2

こちらをご覧ください:

https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

スクロールの定義カスタム中間テーブルモデル

まで基本的に何をしなければならないことは、このようなクラスを定義することです:

class AccountAgent extends Illuminate\Database\Eloquent\Relations\Pivot 
{ 
    /** 
    * Many:1 relationship with Fee model 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function fee() 
    { 
     return $this->belongsTo(Fee::class); 
    } 
} 

次に、Accountクラスにたくさんの関係を定義します。これに代えて、あなたのコード内で次に

/** 
* The agents that belong to the account. 
*/ 
public function agents() 
{ 
    return $this->belongsToMany(Agent::class)->using(AccountAgent::class); 
} 

、:

foreach ($account->agents as $agent) { 
    echo $agent->fee; 
} 

が...この操作を行います。そのループの$ fee_objectで

foreach ($account->agents as $agent) { 
    /** @var Fee $fee_object */ 
    $fee_object = $agent->pivot->fee; 
} 

は、クラス料金(モデルクラスであること料金表をカバーしています)ので、echo $fee_object->fee_amountや他の列を使用する必要があります。

+0

ありがとうございます。私は、ピボットテーブルのモデルを作成することが行く方法だったと思っていたが、私はちょうどそれが完了した方法を正確に知らなかった:) –

+0

よろしくお願いします。 "Fee"、 "Foe"、 "Fum"というクラスがさらに必要になることを指摘することを止めなければならないと私は言います。 :) – delatbabel