在Symfony项目中添加对MongoDB模式的引用

时间:2017-09-14 10:30:32

标签: mongodb symfony bidirectional

我尝试使用Symfony中的一些引用创建MongoDB数据库。 在我的上下文中,我有2个文档客户会议一个客户可以许多会议,以便我做了什么:

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 bin / console doctrine:mongodb:schema:update

我得到了:

没有为Document&#39; FrontOfficeBundle \ Document \ Meeting&#39;指定标识符/主键。每个文档都必须有一个标识符/主键。

我尝试使用 @MongoDB \ UniqueIndex(),但没办法。 我认为 @MongoDB \ Id 应该是一个标识符!!!

版本

  • Symfony 3.2
  • MongoDB 3.4.4

有什么想法吗?

谢谢你。

1 个答案:

答案 0 :(得分:0)

最后我找到了一个解决方案,首先我在文档客户中添加了一个名为$ meetings的字段,并在文档会议中添加了另一个$ customer:

<强> Customer.php

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

<强> Meeting.php

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

然后运行命令行以生成setter和getter:

  

php bin / console doctrine:mongodb:generate:documents mybundleBundle

当我运行一个灯具(创建一个客户然后它的会议)时,一切正常,您会注意到您的文档中已经定义了 1到很多之间的关系(我正在使用罗盘显示mongoDB)作为 One-to-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是主键和外键,永远不会尝试定义对此唯一字段的引用。

感谢您的关注。