2017-09-14 52 views
0

我試圖用Symfony中的一些引用來創建MongoDB數據庫。 在我的方面,我有2個文件客戶會議一個客戶可以有很多會議讓我做什麼:在Symfony項目中添加對MongoDB模式的參考

Meeting.php

<?php 

namespace FrontOfficeBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Meeting 
{ 
    /** 
    * @MongoDB\Id 
    * @MongoDB\ReferenceOne(targetDocument="Customer") 
    */ 
    protected $id; 

    /** 
    * @MongoDB\Field(type="timestamp") 
    */ 
    protected $creationDate; 

.. 。

Customer.php

<?php 

namespace FrontOfficeBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Customer 
{ 
    /** 
    * @MongoDB\Id() 
    * @MongoDB\ReferenceMany(targetDocument="Meeting") 
    */ 

    protected $id; 

    /** 
    * @MongoDB\Field(type="string") 
    */ 
    protected $username; 

...

,然後當我運行命令行:

PHP斌/控制檯學說:MongoDB中:模式:更新

我:

沒有爲Document'FrontOfficeB指定標識符/主鍵undle \文檔\會議」。每個文檔都必須有一個標識符/主鍵。

我試過使用@MongoDB \ UniqueIndex()但沒辦法。 我認爲@MongoDB \ Id應該是一個標識符!

版本

  • Symfony的3.2
  • 的MongoDB 3.4.4

任何想法?

謝謝你。

回答

0

最後,我找到了一個解決方案,我首先增加了射門被稱爲$會議文件客戶,並在文件會議這樣的其他客戶$在:

Customer.php

/** 
* @MongoDB\ReferenceMany(targetDocument="meeting", mappedBy="customer") 
*/ 
protected $meetings; 

會議。PHP

/** 
* @MongoDB\ReferenceOne(targetDocument="customer", inversedBy="meetings") 
*/ 
protected $customer; 

然後運行命令行來生成getter和setter方法:

PHP斌/控制檯學說:MongoDB的:生成:文件mybundleBundle

當我運行一個夾具(創建一個客戶,然後會議),一切工作正常,你會注意到關係1到很多已在您的文檔中定義(我正在使用指南針來顯示mongoDB)作爲1對Squillions模型(約1對N的關係的詳細說明:這是指子文檔(https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1)(會議)包含父的基準如下所示:

客戶

enter image description here

會議

enter image description here

在MongoDB中,@ MongDB/Id是主鍵和外鍵,並且從不嘗試定義對此唯一字段的引用。

感謝您的關注。