Doctrine ODM关联未加载

时间:2014-06-23 08:39:52

标签: php mongodb symfony doctrine-orm doctrine

我开始使用Doctrine MongoDB ODM。我有一个名为Document的文档,该文档与另一个名为originalFile的文档有File关联。

class Document extends AbstractDocument
{
/**
 * @var integer $id
 *
 * @MongoDB\Id
 */
protected $id;

/**
 * @var ImportSource
 *
 * @MongoDB\ReferenceOne(targetDocument="ImportSource", cascade="all", simple=true)
 */
protected $importSource;

/**
 * @var DocumentState
 *
 * @MongoDB\ReferenceOne(targetDocument="DocumentState", cascade="all", simple=true)
 */
protected $state;

/**
 * @var \DateTime $created
 *
 * @MongoDB\Date
 */
protected $created;

/**
 * @var \DateTime $modified
 *
 * @MongoDB\Date
 */
protected $modified;

/**
 * @var File $formattedFile
 *
 * @MongoDB\ReferenceOne(targetDocument="File", cascade="all")
 */
protected $formattedFile;

/**
 * @var File $originalFilename
 *
 * @MongoDB\ReferenceOne(targetDocument="File", cascade="all")
 */
protected $originalFile;

//getters, setters etc..
}

File

class File
{
/**
 * @var string
 *
 * @MongoDB\Id
 */
protected $id;

/**
 * @var FileType
 *
 * @MongoDB\ReferenceOne(targetDocument="FileType", cascade="all", simple=true)
 */
protected $type;

/**
 * @var string
 *
 * @MongoDB\String
 */
protected $basename;

/**
 * @var \DateTime
 *
 * @MongoDB\Date
 */
protected $created;

/**
 * @var \DateTime
 *
 * @MongoDB\Date
 */
protected $deleted;

/**
 * @var \MongoGridFSFile
 *
 * @MongoDB\File
 */
protected $file;

存储文档没有任何问题。 Document和File-Document存储在MongoDB中。当我加载Document时,$originalFile属性为null。我不知道遗漏了什么。映射是错误还是仅仅是Doctrine中的错误?

编辑:

这就是我存储文件的方式:

//create if not exists
if ($documentObj === null) {
    $documentObj = new Document();
    $documentObj->setCreated(new \DateTime());
    //create file
    $file = new File();

} else {
    $documentObj->setModified(new \DateTime());
    //get file
    $file = $documentObj->getOriginalFile();
}
$file->setFile($pathToFile);
//set file
$documentObj->setOriginalFile($file);
//set import source
$documentObj->setImportSource($source);
//store document
$documents[] = $this->storeDocument($documentObj, $documentFields);

//... method storeDocument fills other properties of the document and finally persits the document:
$this->manager->persist($documentObj);
$this->manager->flush();

2 个答案:

答案 0 :(得分:0)

我不知道为什么,但它现在正在工作......我被其他项目占用了几天,回到这个项目,再次运行我的单元测试,一切正常。我唯一做的就是composer update。也许是与我的设置相关的错误。

答案 1 :(得分:0)

我遇到了这样的问题,它与元数据缓存有关,只需运行

bin/console cache:clear
bin/console doctrine:cache:clear-metadata 

如果您使用symfony内置缓存

,也很了解这些命令
bin/console doctrine:cache:clear-query  
bin/console doctrine:cache:clear-result