3

この質問が他の場所で回答されている場合は、事前にお詫び申し上げます。既存の回答を高低で検索しましたが、空になりました。おそらく私は間違ったキーワードで探しています。

私には 3 つのモデルがあり、そのうちの 2 つ (学生と家庭教師) は、他の両方のモデルと$hasMany関係がある共通のモデル (予定) と関係があります。$belongsTo正確なモデルは以下のとおりです...

学生は多くの予定を持っています...

class Student extends AppModel {
    var $hasMany = array (
        'Appointment' => array (
            'foreignKey' => 'student_id'
        )
    );

家庭教師には多くの予定があります...

class Tutor extends AppModel {
    var $hasMany = array (
        'Appointment' => array (
            "foreignKey" => 'tutor_id'
        )
    );

予定は生徒とチューターに属します...

class Appointment extends AppModel {
    var $belongsTo = array (
        'Student' => array (
            'foreignKey' => 'student_id'
        ),
        'Tutor' => array (
            'foreignKey' => 'tutor_id'
        )   
    );

学生の記録 (例: 'app/student/view/4') を見るとき、次の予定の日付とその予定の家庭教師の名前をリストできるようにする必要があります。そのため、Student モデルを見ながら、Tutor モデル (名前) からデータにアクセスする必要があります。現時点では$this->Student->query()、関連するチューター レコードを取得することしかできませんでしたが、これにより、生徒の情報が結果の配列で繰り返されます。

$hasManyとの関係はすべて$belongsTo正常に機能します。CakePHP には、関連情報を取得するために欠落している組み込み関数がありますか、それともどこかで手書きで行う必要がありますか?

4

1 に答える 1

3

Containableの使用を検討する必要があります。慣れていない場合は、モデルにアタッチして、必要な数のモデルに含める関連モデルを正確に定義するために使用できるビヘイビアです。find

AppModelで設定することにより、常にすべてのモデルで使用します。

var $actsAs = array('Containable');

次に、コントローラーで:

$this->Student->find('first', array(
    'conditions' => ...,
    'contain' => array('Appointment' => 'Tutor'),
    ...
));
于 2012-04-11T17:46:27.433 に答える