'procedures' テーブルと HABTM 関係を持つ 'patient_cases' テーブルがあります。この「手順」テーブルは、「コンサルタント」テーブルと多対 1 の関係を持ち、次に「専門」テーブルと多対 1 の関係を持ちます。
関係は正常に機能しており、cakephp デバッグ ツールバーを使用して、'patient_cases' インデックス ページを見ると、すべてが正しく行われていることがわかりますが、関連するモデルのすべてのフィールドではなく、consultant_id と speciality_id しか取得していません。
これは私が信じている起こっているべきことです-
CakePHP では、いくつかの関連付け (belongsTo および hasOne) が自動結合を実行してデータを取得するため、クエリを発行して、関連するモデルのデータに基づいてモデルを取得できます。
しかし、これは hasMany および hasAndBelongsToMany 関連付けには当てはまりません。
私は、procedures.consultant_id を使用して「consultants」テーブルからコンサルタント名を取得し、consultant.specialty_id を使用して「専門分野」から専門名を取得できるようにしたいと考えています。
私はいくつかのテーブル結合で遊んでみましたが、成功しませんでした.
class PatientCase extends AppModel {
public $hasAndBelongsToMany = array(
'Procedure' => array(
'className' => 'Procedure',
'joinTable' => 'patient_cases_procedures',
'foreignKey' => 'patient_case_id',
'associationForeignKey' => 'procedure_id',
'unique' => true
)
);
}
class Procedure extends AppModel {
public $belongsTo = array(
'Consultant' => array(
'className' => 'Consultant'
)
);
}
class Consultant extends AppModel {
public $belongsTo = array(
'Specialty' => array(
'className' => 'Specialty',
'conditions' => array('Specialty.active' => 1)
)
);
public $hasMany = array(
'Procedure'
);
}
class Specialty extends AppModel {
public $hasOne = array(
'Consultant'
);
);
}
$this->set('patientCases', $this->PatientCase->find('all'));
必要なものはすべて返され、各モデル配列が返されます (ここでは言及されていないその他の関係)。ただし、モデル配列「コンサルタント」は返されません。これは、「コンサルタント」モデルにリンクされている「専門」データを取得できないことも意味します。
編集 私は、PatientCasesController でこれを使用して、必要なデータを取得することができました
$this->set('patientCases', $this->PatientCase->find('all'));
$this->set('patientCaseProcedures', $this->PatientCase->Procedure->find('all'));
しかし、理想的には、1 つの「patientCases」ですべてを返したいのですが、これは可能ですか?
編集 再帰関数を使用して問題を解決しました
$this->PatientCase->recursive = 3;
$this->set('patientCases', $this->PatientCase->find('all'));