【问题标题】:All object properties are being saved, is it possible to only persist the fields that I've mapped?所有对象属性都被保存,是否可以只保留我映射的字段?
【发布时间】:2011-03-05 21:34:52
【问题描述】:

我正在使用 Doctrine 2 ODM(使用 MongoDB)。

我的文档模型:

class Users_Model_User
{
    public $id;
    public $username;
    public $password;
    public $myRuntimeProperty = 'some value';
}

我在 YAML 中的文档映射:

Users_Model_User:
db: my_db
collection: users
fields:
    id:
        fieldName: id
        id: true
    username:
        fieldName: username
        type: string
    password:
        fieldName: password
        type: string

我的测试代码:

$user = new Users_Model_User;
$user->username = 'hello';
$user->password = 'world';
$this->dm->persist($user);
$this->dm->flush();

$user = $this->dm->findOne('Users_Model_User', array('username' => 'hello'));

Zend_Debug::dump($user);

我的结果:

object(Users_Model_User)#81 (4) {
  ["id"] => string(24) "4c1d5eb68ead0eb332000000"
  ["username"] => string(5) "hello"
  ["password"] => string(5) "world"
  ["myRuntimeProperty"] => string(10) "some value"
}

如何使“myRuntimeProperty”不与我的文档一起保存?我的模型正在保存所有属性,包括“_propertyChangedListeners”之类的东西,当模型重新加载时,这会搞砸一切。

【问题讨论】:

    标签: php doctrine mongodb


    【解决方案1】:

    从未使用过 Doctrine,但似乎正在发生以下两种情况之一:

    1. Doctrine 有一个非常严重的错误,它忽略了您的 YML 定义。
    2. 你不是在“连接”YML 文件。

    看看the docs,看来你需要一些额外的“魔法”:

    $driver = new YamlDriver(array('/path/to/files'));
    $config->setMetadataDriverImpl($driver);
    

    这可能是你的问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多