0

我正在使用 Symfony2 和 Doctrine2 制作实体。我制作了一些实体来代表我的两个实体之间的多对多关系。

这些实体之一的示例:

/**
 * @ORM\Entity
 */
class Contact_Conference_Invitation
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Aurae\UserBundle\Entity\Contact")
     */
    private $contact;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Aurae\ConferenceBundle\Entity\Conference")
     */
    private $conference;

    /**
     * @var datetime dateInvitation
     *
     * @ORM\Column(name="dateInvitation", type="datetime")
     */
    private $dateInvitation;

    //Getters and setters
}

我尝试更新我的 sql 架构,但没有出现与这些实体对应的表。有没有我必须声明它们的地方(配置或类似)?如果不是,有什么问题?

非常感谢

编辑:我忘记了这些类的名称空间,这就是 Doctrine 省略它们的原因。另一个案例已关闭:) 感谢您的回答!

4

3 回答 3

3

假设...

不,您不需要在 Entity 目录之外的任何地方声明它们。

  • 你收到的错误信息是什么?

  • 我猜你加了

    使用 Doctrine\ORM\Mapping 作为 ORM;

在你的类的顶部,让它们被映射。

我试过 ...

我试图通过添加一个简单的联系人和会议实体来生成你的实体,它工作正常。以下是代码片段:

Contact_Conference_Invitation.php

namespace Ahsio\StackBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Contact_Conference_Invitation
{
    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Ahsio\StackBundle\Entity\Contact")
     */
    private $contact;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Ahsio\StackBundle\Entity\Conference")
     */
    private $conference;

    /**
     * @var datetime dateInvitation
     *
     * @ORM\Column(name="dateInvitation", type="datetime")
     */
    private $dateInvitation;

    //Getters and setters
}

联系方式.php

namespace Ahsio\StackBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Contact
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @param $id
     */    
    public  function setId($id)
    {
        $this->id = $id;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
}

会议.php

namespace Ahsio\StackBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Conference
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @param $id
     */
    public  function setId($id)
    {
        $this->id = $id;
    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
}

以下是生成的表:

在此处输入图像描述

注意:我为实体生成使用了一个特定的命名空间来正常工作,您需要更改它们。

于 2012-06-11T14:06:13.453 回答
0

在您提供的代码示例中,我没有看到您的 ManyToMany 关系的定义。

例如,这是我为一个项目实现的多对多关系

实体项目.php

/**
 * @var Provider[]
 *
 * @ORM\ManyToMany(targetEntity="Provider", mappedBy="projects")
 */
protected $providers = null;

实体提供者.php

/**
 * @var Project[]
 *
 * @ORM\ManyToMany(targetEntity="Project", inversedBy="providers")
 * @ORM\JoinTable(name="PROVIDER_PROJECT")
 */
protected $projects = null;

如您所见,您在此处为 ManyToMany 关系定义连接表。

当然,这些实体是特定于我的特定项目的,但你明白了,你可以根据自己的需要轻松调整它。

于 2012-06-11T14:02:07.103 回答
0

另外不要忘记检查您是否启用了自动映射。

在你的 config.yml 你应该有

doctrine:
    orm:
        auto_mapping: true

遇到这个问题是因为我的实体也没有生成,这是我的问题,它可以为那些在同样问题上苦苦挣扎的人节省一些时间。

于 2017-06-06T09:28:48.157 回答