更新:現在有這種類型的官方支持。在你的註釋使用的ObjectId/MongoId類型使用@ObjectId
或@Field(type="object_id")
。無需使用下面的解決方案。
此外,使用從github.com/doctrine/mongodb-odm最新的主碼,並避免使用網站上的版本(它是過時的)。
解決方案(不建議使用)
看起來像有這種不支持呢。我討論在IRC頻道這個問題,在這裏開了票呢:https://github.com/doctrine/mongodb-odm/issues/125
一個臨時的解決將是定義自定義類型和文檔類使用像@Field(type="objectid")
註解。
下面是我使用的是完成這一任務的自定義類型的代碼。
/**
* Custom Data type to support the MongoId data type in fields
*/
class ObjectId extends \Doctrine\ODM\MongoDB\Mapping\Types\Type
{
public function convertToDatabaseValue($value)
{
if ($value === null) {
return null;
}
if (! $value instanceof \MongoId) {
$value = new \MongoId($value);
}
return $value;
}
public function convertToPHPValue($value)
{
return $value !== null ? (string)$value : null;
}
}
使用
\Doctrine\ODM\MongoDB\Mapping\Types\Type::addType('objectid', 'ObjectId');
註冊它,我試了一下。這不起作用。看起來你可以每個文檔只使用一次@Id。看起來不像它支持這種類型。如果我在NONE策略中使用@Id,則文檔的主標識符停止工作。看起來它會覆蓋先前定義的行爲。 – Dayson