Все свойства объекта сохраняются, возможно ли сохранить только те поля, которые я сопоставил? - PullRequest
0 голосов
/ 20 июня 2010

Я использую ODM Doctrine 2 (с 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, который портит все, когда модель перезагружается.

1 Ответ

0 голосов
/ 22 июня 2010

Никогда не использовал Doctrine, но похоже, что происходит одна из двух вещей:

  1. Doctrine имеет довольно серьезную ошибку и игнорирует ваши определения YML."подключая", файлы YML.

Глядя на документы , кажется, вам здесь нужна дополнительная "магия":

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

Может ли это быть вашей проблемой?

...