好的,所以我在这个网站和谷歌上做了很多搜索并找到了一些答案,但没有一个有效。我也检查了@ ichikaway的网站和测试程序。即使那里的东西也不适合我。另外,当使用'if'语句包装save / update时,它总是返回true,所以我可以做的调试不多。
以下是可能有助于您指导解决方案的相关代码。谢谢!
MyClass模型定义
class MyClass extends AppModel
{
var $name = 'MyClass';
var $useTable = 'my_classes';
//var $belongsTo = array();
//var $hasMany = array();
var $useDbConfig = 'mongo';
var $mongoSchema = array(
'_id' => array('type' => 'integer', 'primary' => true, 'length' => 40),
'children' => array(
'child_id' => array('type' => 'integer','length' => 40),
'child_first_name' => array('type'=>'string'),
'child_last_name'=>array('type'=>'string'),
'active'=>array('type' => 'integer', 'length' => 1),
),
'teachers' => array(
'teacher_id' => array('type' => 'integer','length' => 40),
'teacher_first_name' => array('type'=>'string'),
'teacher_last_name'=>array('type'=>'string'),
'primary'=>array('type' => 'integer', 'length' => 1),
'active'=>array('type' => 'integer', 'length' => 1),
),
'name' => array('type'=>'string'),
'active'=>array('type' => 'integer', 'length' => 1),
'created'=>array('type'=>'datetime'),
'modified'=>array('type'=>'datetime'),
);
}
来自我的StudentsController的代码
$currentClass = $this->data["MyClass"]["id"];
$classtoedit = $this->MyClass->findById($currentClass);
$addChildToClass = array(
'MyClass' => array('id'=>$currentClass,
'$push' =>
array('children' =>
array('child_id'=>$newChildId,
'child_first_name'=>$first_name,
'child_last_name'=>$last_name,
'active'=> 1)
)
)
);
print_r($addChildToClass);
$this->MyClass->id = $currentClass;
if($this->MyClass->save($addChildToClass))
{
$this->Session->setFlash("Your child has been successfully added.");
}
修改 我只能通过PHP术语获得我需要的功能,但同样,我真的想在CakePHP中以正确的方式完成它。我宁愿不把两者混合在一起,以便任何其他维护人员可能跟我一起。 FYI
答案 0 :(得分:0)
从documentation开始,您似乎还需要使用mongoNoSetOperator
。
tests中有一些使用示例。
我还认为您需要使用_id
而不是id
。在您的用例中,您尝试更新现有记录,以便在驱动程序代码调用insert
而不是update
时,您应该获得重复的密钥异常。
答案 1 :(得分:0)
我想强调两件事,如果我错了,请告诉我。
1)为什么要在数组变量$addChildToClass
和其他$this->MyClass->id = $currentClass;
2)什么是关键''$ push'in the
$ addChildToClass`?
我想如果你将尝试使用类似的东西......那么它将起作用
$addChildToClass = array(
array('children' =>
array('child_id'=>$newChildId,
'child_first_name'=>$first_name,
'child_last_name'=>$last_name,
'active'=> 1)
)
);
因为您在更新字段之前设置了id的任何方式。