use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* @ODM\Document()
*/
class My_Doctrine_Model
{
/** @ODM\id */
protected $id;
public function getId()
{
return $this->id;
}
public function setId($value)
{
$this->id = $value;
return $this;
}
}
和代码
$myModel = new My_Doctrine_Model();
$myModel->setId(new MongoId());
// Id is my set id
$dm->persist($myModel);
// Id is my set id
$dm->flush();
// Id is overwritten and the object is inserted with an other one
为什么 Doctrine 会覆盖我的设置 ID?有没有办法可以防止这种情况?
PersistenceBuilder::prepareInsertData
当检查是否设置了 id 时,会设置新的 Id 。我不知道为什么 id 字段被排除在更改集之外。
更新
我又读了一点代码,发现原因if
是UnitOfWork::getDocumentActualData
.
else if ( ! $class->isIdentifier($name) || $class->isIdGeneratorNone()) {
$actualData[$name] = $value;
}
没有else
所以没有为 id 设置值。
这是开发商深思熟虑的设计选择吗?
解决了
这是在我尚未更新到的最近提交中更新的。我不完全确定这是有意的。
https://github.com/doctrine/mongodb-odm/commit/fb2447c01cb8968255383ac5700f95b4327468a3#L2L503