2012-03-06 54 views
0

我的模型關係如下:CakePHP的2.1 - 保存(和創造)多加入模型和相關模型

Student hasMany ClassStudent 
Class hasMany ClassStudent 
ClassStudent belongsTo Student 
ClassStudent belongsTo Class 
ClassStudent is a join model. 

我想要做的就是創建學生(S),使用現有的類或創建新的,並創建一個鏈接學生和課程的連接模型記錄。

我想在一次調用中完成這一切保存(如果這是可能的話)。

我曾嘗試:

$data = array(
    'Student' => array(
     '0' => array(...), // Data in here 
     '1' => array(...), 
     ..., 
     'n' => array(...) 
    ), 
    'Class' => array(
     'class_id' => x // The class that I want the above students to be associated with 
    ) 
) 

我想要做的就是創建學生的N個記錄,並將它們添加到一個類(可能在如果用戶想添加一個新的同時創建一個類一)。我還希望在創建學生記錄時爲每個學生創建一個連接模型記錄。

這可能嗎?我正在使用Cake 2.1.0(今天的穩定版本),並且我用$ options ['deep'] = true嘗試了不同類型的saveAll(saveAssociated和saveMany)。

有沒有可能我的數據數組的格式不正確?

編輯: 我也曾嘗試:

$data = array(
    'ClassStudent' => array(
     '0' => array(
      'Student' => array (...), // Data 
      'Class' => array(id => x) // The id of the Class the Student should be associated to 
     ..., 
     'n' => array(
      'Student' => array(...), // n-th Student 
      'Class' => array(id => x) 
    ) 
); 

$this->saveAll($data['ClassStudent'], array('deep' => true)); 

在上述情況下,成功地創造了學生表中的新學生檔案,但在連接表中創建什麼。

回答

-1

saveAll(saveAll是saveMany和saveAssociated的包裝)是該作業的正確工具。看看saveAll的文檔,我沒有看到關於它更改爲2.1的任何說明。花更多的時間閱讀,這裏有一些想法

首先,你的數組結構中是否有一個類型。你有

'Class' => array ('class_id' => x) 

如果類已經被定義,你只是想增加一個學生,那麼這將是

'ClassStudent' => array('class_id' => x) 

隨着中說,CakesPHP ORM應該允許您使用保存所有與hasMany使用數字指數,所以如果假設你有一個錯字,那麼下面可能適合你

$data = array(
    'Student' => array(
     '0' => array(...), // Data in here 
     '1' => array(...), 
     ..., 
     'n' => array(...) 
    ), 
    'ClassStudent' => array(
     'class_id' => x // The class that I want the above students to be associated with 
    ) 
) 
$this->ClassStudent->saveAll($data); 
+0

嘿瑞恩,感謝您的答覆。我確實使用了鏈接的方法來一次保存一個連接模型,並且工作正常。但在那種情況下,我只做一個。 因此,不可能一次創建多個連接模型? – user1251202 2012-03-06 04:53:32

+0

這實際上看起來更有趣。在閱讀更多內容之後,似乎Cake文檔可能會造成一些混淆。截至目前,似乎你只能保存一組關聯的時間,在ClassStudent模型上調用saveAll – 2012-03-06 07:00:57

+0

Hey Ryan,我試過上面的數據格式,它似乎沒有工作。至於我的保存呼叫,不知道它是否重要,但在我的ClassStudent模型中,我有調用$ this-> saveAll($ data,array('deep'=> true))的函數(我曾嘗試過並沒有深)。然後在我的類控制器中,我調用方法爲$ this-> Class-> ClassStudent-> saveClassStudents($ this-> request-> data)。 請注意,當我檢查數據庫時,沒有新的記錄。 – user1251202 2012-03-06 17:48:03