CAKEPHPモデルの関連付けに没頭

私はcakephpを使っていて、複数のモデルをリストアップしようと考えています。私のシナリオは次のとおりです。

私は、タスクとイベントという2つの主要なモデルを持っています。イベントモデルを使用してすべての変更を追跡しました。これにはffフィールドがあります:id、model、model_id、changed
イベントテーブルを使用して複数のモデルの変更を追跡しました。だから何かがタスクモデルに変更されたら、それはイベントモデルに記録されます(アイデアを得る?)

私がしたいのは、私がイベントモデルのfindメソッドを使うたびに、私はモデル情報(例えば、タスクモデル)を以下のようなイベント情報と共にリストしたいと思います:

array(
    [0] => array (
        [Event] => array(
            id => 1
            model => Task
            model_id => 2
            changed => array()
        )

        [Task] => array(
            id => 2
            name => Task 1
            descp => Test Task
        )

    )
)

注:モデルはどのモデルでもかまいません。プロジェクトモデルにすることもできます。

私のtask.phpでは、簡単に宣言できるので問題はありません:

var $hasMany = array(
    'Events' => array(
            'className' => 'Events',
            'foreignKey' => 'model_id',
            'dependent' => false,
            'conditions' => array('Events.model' => 'Task')
        )
    );

私はイベントの情報を取得することができます

 $this->Task->Event->find('all'); 

私はなぜか分からない。

だから私が宣言するとすぐに、私のイベントモデルでこれのようなもの:

var $belongsTo = array(
    'Task' => array(
        'className' => 'Task',
        'foreignKey' => 'model_id',
        'conditions' => array('Event.model' => 'Task', 'Event.model_id' => 'Task.id'),
        'fields' => '',
        'order' => ''
    )
);

SQLエラーがスローされます。あなたはそれを実装する方法のアイデアを持っていますか? ありがとうございました。 🙂

ベストアンサー

I use polymorphic models all the time. The reason that
$this->Task->Event->find('all') doesn’t work
is that you were performing the find on the Event
model which, until you defined its belongsTo
association, didn’t have any means of retrieving the
Task info.

今のところ、奇妙に見えるのは、あなたが Task の関連付けをそのコンベンションである
Task (plural)モデル。また、 className
を複数のバージョンとして識別しました。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です