0

'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'));
4

0 に答える 0