0

わかりましたので、このサイトと Google で多くの検索を行い、いくつかの回答を見つけましたが、どれもうまくいきませんでした。@ichikaway のサイトとテスト手順もチェックしました。そこにあるものでさえ、私にはうまくいきません。また、「if」ステートメントで保存/更新をラップすると、常に 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 で正しい方法でやりたいと思っています。私の後に来る可能性のある他のメンテナーのために、この 2 つを一緒に混ぜたくありません。ご参考までに

4

2 に答える 2

0

ドキュメントから、も使用する必要があるようですmongoNoSetOperator

テストでの使用例があります。

_idではなく使用する必要があるとも思いますid。ユースケースでは、既存のレコードを更新しようとしているため、ドライバーコードが呼び出すのinsertではなくupdate、重複キーの例外が発生するはずです。

于 2013-05-27T09:08:46.233 に答える
0

強調したいことが2つあります。間違っている場合はお知らせください。

1) id を 1 つは配列変数$addChildToClassで、もう1 つは 2 回設定する理由$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を設定しているからです。

于 2013-05-27T18:53:12.787 に答える