좋아, 나는이 사이트와 Google에서 많은 검색을 수행하고 답변을 찾았지만 그 중 아무 것도 작동하지 않았다. 나는 또한 @ ichikaway의 사이트와 테스트 절차를 체크 아웃했다. 거기에있는 물건조차 나를 위해 일하지 않습니다. 또한 'if'문으로 저장/업데이트를 래핑 할 때 항상 true를 반환하므로 수행 할 수있는 디버깅이 많지 않습니다.CakePHP에서 서브 문서 배열에 어떻게 추가/삽입 할 수 있습니까?
다음은 나를 솔루션으로 안내하는 데 도움이되는 관련 코드입니다. 감사! 내 StudentsController에서
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'),
);
}
코드
$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
$ currentClass = $ this-> data [ "MyClass"] [ "id"]; "id"가 아닌 "_id"를 참조하고 있습니까? $ this-> MyClass-> id와 동일합니다. 이미 $ classtoedit을 가지고 있습니까? –
나는 그렇게 생각했을 것이다. 그러나 그것은 무엇인가의 이유로하지 않는다. 데이터베이스에서는 _id이지만 CakePHP에서 수신되면 그냥 "id"입니다. 그 부분은 잘 작동하는 것 같다. 내가 일할 수없는 서브 디스트 물건 일뿐입니다. – DarkUnderlord
데이터 배열에서 "_id"'로 변경하면 다음과 같이 나타납니다. E11000 중복 키 오류 인덱스 : weebehavedev.my_classes. $ _ id_ dup 키 : {: ObjectId ('51a051f9f1d0bab103000000')} – DarkUnderlord