2012-03-06 52 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