MongoDB中的默认字段和值,使用cakeHP


Default Fields and values in MongoDB, using cakePHP

我正在使用cakephp 2.1mongodb 2.03构建应用程序,我正在使用ishikaway的mongodb数据源

我需要设置一些默认值,这些值将被添加到模型中,我正在这样做

<?php
class DynamicFormResponse extends AppModel{
    public $useDbConfig = 'mongodb';  
    public $useTable = 'dynamicFormsResponse';
    public $primaryKey = '_id';
    public $validate=array();
    public $mongoschema = array(
        'created' => array('type' => 'datetime'),
        'modified' => array('type' => 'datetime'),
        'escalation'=>array(
            'type'=>"integrer",
            "default"=>0
            ),
        "status"=>array(
            "type"=>"string",
            "default"=>"pending"
            ),
    );
    public function setSchema($schema) {
        $this->_schema=$schema;        
    }
    public function getSchema(){
        return $this->_schema;
    }
}

很明显,我不能像MySQL那样直接在MongoDb中设置默认值,而且很明显,由于我在问这个问题,上面的方法不起作用。

关于如何解决这个问题,有什么建议吗?

Ps:

  • 这对CakePHP在模型中设置默认字段值没有帮助
  • 文件也不清楚
  • 此处提供完整代码

编辑:

我目前已经通过提交一个MVC sin,来解决这个问题

在用型号保存数据之前,我正在控制器中添加默认值

<?php
class DynamicFormResponse extends AppModel {
    public $name="DynamicFormResponse";
    public $useDbConfig = 'mongodb';
    public $useTable = 'dynamicFormResponse';
    public $primaryKey = '_id';
    public $validate = array();
    public function getDefaults(){
        $defaultValues=array(
            "escalation"=>0,
            "status"=>"pending",
            "department_id"=>NULL,
            "user_agent"=>env("HTTP_USER_AGENT")
        );
        return $defaultValues;
    }
  ...
  ...
类DynamicFormsController扩展AppController{。。。。。。公共函数getForm($id=null){。。。。。。/***设置默认值*/foreach($this->DynamicFormResponse->getDefaults()作为$fieldName=>$defaultValue){if(空($this->request->data[$this->DynamicFormResponse->alias][$fieldName]))$this->request->data$$this->DynamicFormResponse->alias][$fieldName]=$defaultValue;}/***数据验证*/if($this->DynamicFormResponse->save($this->request->data)==true){$this->set("ticket_id",$this-->DynamicFormResponse->id);$this->render('ticket_successfully_saved');回来}

有更好的解决方案吗?因为那样做似乎不好。

这不是一个mongoDB问题,但无论如何,我建议您将用户数据与beforeSave()中的默认值合并。

我们在每个模型中声明默认值如下:

public $defaultValues = array(
    'report' => 't',
    'reportinterval' => '7',
    'type' => '0'
);

并将其合并到beforeSave()中:

/**
 * Extends beforeSave() to add default values
 *
 * @param array $options
 * @return bool
 */
public function beforeSave($options = array()) {
    // Add default values if not set already
    foreach ($this->defaultValues as $fieldName => $defaultValue) {
        if (empty($this->data[$this->alias][$fieldName]))
        $this->data[$this->alias][$fieldName] = $defaultValue;
        }
    return parent::beforeSave($options);
}