繁体   English   中英

Symfony2:实体未在数据库中创建

[英]Symfony2 : Entities not created in database

我正在用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模式,但是没有出现与这些实体相对应的表。 我必须在某个地方声明它们(配置等)吗? 如果不是,那是什么问题?

非常感谢

编辑:我已经忘记了这些类的名称空间,这就是为什么它们在教义中被忽略了。 另一个案件结案:)感谢您的回答!

假设...

不,您无需在Entity目录中的其他任何地方声明它们。

  • 您收到什么错误消息?

  • 我想你加了

    使用Doctrine \\ ORM \\ Mapping作为ORM;

在您的课程的顶部,以便将它们映射。

我试过了 ...

我试图通过添加一个简单的Contact&Conference实体来生成您的实体,并且它工作正常。 以下是代码片段:

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
}

Contact.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;
    }
}

Conference.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;
    }
}

这是生成的表:

在此处输入图片说明

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

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

例如,这是我为项目实现的ManyToMany关系

实体Project.php

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

实体Provider.php

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

如您所见,在这里您可以为ManyToMany关系定义联接表。

当然这些实体是特定于我的特定项目的,但是您了解了这个想法,并且可以轻松地将其适应您的需求。

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

在您的config.yml中,您应该

doctrine:
    orm:
        auto_mapping: true

之所以遇到这个问题,是因为我的实体也没有生成,这是我的问题,它可以为陷入同一问题的人们节省一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM