2011-11-13 85 views
0

即時通訊使用CakePHP和Im,這裏是我的情況:CakePHP的Stucked卡死有關列出多個模型的想法關聯模型

我有兩個主要模式,即任務和活動。我使用Events模型來跟蹤所有更改。這有ff字段:id,model,model_id,已更改 我使用Events表來跟蹤多個模型更改。所以當有東西改變任務模型它將被記錄到事件模型(得到的想法??)

我想要做的是每當我使用事件模型的查找方法,我想列出模型信息(用於例如,任務模式),像這樣我的活動信息一起:

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

我可以使用find方法上取得任務事件的信息,雖然使用

$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錯誤。你們有一個想法如何實施它? 謝謝先進。 :)

回答

2

我一直在使用多態模型。 $this->Task->Event->find('all')不起作用的原因是您在Event模型上執行查找,直到您定義其belongsTo關聯爲止,沒有任何方法檢索Task信息。

至於現在,我看到的唯一看起來很奇怪的是,你已經將你的Task關聯化爲Events(複數),而不是它的單一版本,這是模型的約定。您還將className識別爲複數版本。

+0

是的男人!有效!這個小問題是罪魁禍首。我刪除了我的模型中的複數形式,它起作用了!非常感謝你,我也會將類似的協會應用到其他車型上。謝謝你!我現在快樂地跳了起來...... :)) – theredforest