2017-08-21 5 views
0

私はA 複雑なアソシエーション - CakePHPの3.xの[ネストされたbelongsToMany]

のように参加コンプレックスを持っているABテーブル ABは、多くのCに所属投げた多くのBに属しているABCテーブルを投げ

今私の問題はどのようにあります私はテーブルABCまでの結果を含むコントローラAのデータを得ることができます。 マイデータベース構造が

表A(ID、名前、コード) 表B(ID、名前、コード) 表C(ID、名前、コードで直接Aに関連し、テーブルABC

を見つけることはありません) 表AB(ID、A_ID、B_ID、料金) 表のABC(ab_id、C_ID、opt_date、TNO)

私はABC

$this->A->find('list',[ 
contain => ['B'] 
    ]); 
のためのデータを取得する方法がわからクエリの下に使用してBに接続することはできませんが、 ここで

私は私の本当のスキーム

1. courses (id, name, course_code, etc...) 
2. sessions (id, name, status, start_date, end_date) 
3. seats (id, name, description, metadata, status) 
4. courses_sessions (id, course_id, session_id, programme_coordinator, academic_coordinator, status) 
5. courses_sessions_seats (id, courses_session_id, seats_id, no_seats) 

現在の関係にそれを変更しています

a) courses belongsToMany sessions using courses_sessions 
b) courses_sessions belongsToMany seats using courses_sessions_seats 

私はケース2がない上可能であれば知っているが、私は何をしたいことでコースの詳細を示すようになっていません1セッションあたりの利用可能な座席数

それはあなたが、私は、テーブルスキーマを考える何EDIT

here in docsそれについて読むことができます。この

$this->A 
    ->find() 
    ->contain([ 
     'B' => ['C'] 
     ]); 

または

$this->A 
    ->find() 
    ->contain([ 
     'B' => function($q) { 
     return $q->contain(['C']);  
     }]); 

のようになります要するに

+0

はちょうど2つのフィールドを返すんリストを検索することである

$courses = $this->Courses ->find() ->contain([ 'CoursesSessions' => ['Sessions', 'SessionsSeats'] ]); foreach ($courses as $course) : // Your code here endforeach; 

を使用するコースの例観点からすべてのデータを取得するには配列[primary_key => display_field]として他のフィールドは選択されません。 – icebreaker

+0

https://book.cakephp.org/3.0/en/orm/associations.html#using-the-through-optionはドキュメントを見ることです – icebreaker

答えて

関連する問題