将带有引用的关联数组作为值保存在教义-mongodb中

Posted

技术标签:

【中文标题】将带有引用的关联数组作为值保存在教义-mongodb中【英文标题】:Saving an associative array with references as values in doctrine-mongodb 【发布时间】:2013-01-09 07:08:31 【问题描述】:

如何将文档中的字段映射为关联数组,其值是对另一个文档的引用?

假设我有一个文档File,它代表磁盘上的某个文件。像这样的:

/** @Document */
class File 

    /** @Id */
    protected $id;

    /** @String */
    protected $filename;

    // Getter and setters omitted

还有一个代表图像的文档,其中存储了对不同尺寸图像的引用。像这样的:

/** @Document */
class Image 

    /** @Id */
    protected $id;

    /** ???? */
    protected $files;

    // Getter and setters omitted

我现在希望能够在图像文档中存储一些对文件的引用,这些文件由它们的大小键入。例如:

$file1 = new File('/some/path/to/a/file');
$file2 = new File('/some/path/to/another/file');

$image = new Image();
$image->setFiles(array('50x50' => $file1,'100x100' => $file2));

生成的 MongoDB 文档应如下所示:


    "_id" : ObjectId("...."),
    "files" : 
        "50x50" : 
            "$ref" : "files",
            "$id" : ObjectId("...")
        ,
        "100x100" : 
            "$ref" : "files",
            "$id" : ObjectId("...")
        
    

那么我该如何映射Image文档中的files字段呢?

【问题讨论】:

【参考方案1】:

在 Doctrine 的 ArrayCollection 中使用“set”策略

/** @Document */
class Image 

    /** @Id */
    protected $id;

    /**
     * @ReferenceMany(targetDocument="File", strategy="set") 
     */

    protected $files;

    public function setFile($resolution, File $file)
    
        $this->files[$resolution] = $file;
    

    // Getter and setters omitted

【讨论】:

以上是关于将带有引用的关联数组作为值保存在教义-mongodb中的主要内容,如果未能解决你的问题,请参考以下文章

教义自引用关联映射(Symfony)

关联的教义 postLoad 事件

教义:将模型值设置为数组

使用教义保存日期字段

教义2按带有ID的数组排序

教义 2 - 具有附加属性和继承的关联表