1

我知道这似乎是一个非常基本的问题,但请在投票之前阅读到最后。

在使用 Codeigniter 和 Doctrine 2 时,我想到了这个问题。

我注意到,至少在使用注释时,合成器与在 Symfony2 中使用 Doctrine 2 时略有不同,我想知道为什么。

我将提供一个示例:

这是 Symfony2 中的一个类,具有多对一关系:

<?php

namespace Pondip\LakeBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;

/**
 * Lake
 *
 * @ORM\Table(name="pondip_lake")
 * @ORM\Entity(repositoryClass="Pondip\LakeBundle\Entity\LakeRepository")
 */
class Lake
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     * @Assert\Type(type="Pondip\LakeBundle\Entity\Venue")
     * 
     * @ORM\ManyToOne(targetEntity="Pondip\LakeBundle\Entity\Venue")
     * @ORM\JoinColumn(name="venue_id", referencedColumnName="id")
     */
    private $venue;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @var text
     *
     * @ORM\Column(name="description", type="text", nullable=true)
     */
    private $description;

    /**
     * @var integer
     *
     * @ORM\ManyToOne(targetEntity="Pondip\UserAccountBundle\Entity\User")
     * @ORM\JoinColumn(name="created_by", referencedColumnName="id", nullable=true)
     */
    private $createdBy;

请注意所有@ORM\ 无处不在。

现在,当将它与 codeigniter2/Doctrine2.3.0 一起使用时,我的控制台中有映射错误。但是,当遵循一些 tuts 时,我最终删除了所有的 ORM\(以及相应的使用 Doctrine\ORM\Mapping 作为 ORM)并且它起作用了。

这项工作:

<?php

namespace Entity;

/**
 * Friend Model
 *
 * @Entity
 * @Table(name="friend")
 * @author  Miles Yohann Merran <hello_miles@hotmail.com>
 */
class Friend
{

    /**
     * @Id
     * @Column(type="integer", nullable=false)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Column(type="string", length=32, unique=true, nullable=false)
     */
    protected $name;

    /**
     * @Column(type="text", nullable=false)
     */
    protected $description;

    /**
     * @Column(type="string", length=64, nullable=false)
     */
    protected $picture;

    /**
     * @Column(type="string", length=64, nullable=false)
     */
    protected $genre;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="friends")
     * @JoinColumn(nullable=false)
     */
    protected $user;


    /**
     * @var datetime $date
     *
     * @Column(name="date", type="datetime")
     */
    protected $date;

当这不起作用时(注意 ORM)

<?php

namespace Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * Friend Model
 *
 * @Entity
 * @Table(name="friend")
 * @author  Miles Yohann Merran <hello_miles@hotmail.com>
 */
class Friend
{

    /**
     * @Id
     * @Column(type="integer", nullable=false)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Column(type="string", length=32, unique=true, nullable=false)
     */
    protected $name;

    /**
     * @Column(type="text", nullable=false)
     */
    protected $description;

    /**
     * @Column(type="string", length=64, nullable=false)
     */
    protected $picture;

    /**
     * @Column(type="string", length=64, nullable=false)
     */
    protected $genre;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="friends")
     * @ORM\JoinColumn(nullable=false)
     */
    protected $user;


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

为什么 ?有什么区别 ?

编辑:确切地说,我尝试了 2 个具有相同结构的实体,一个带有 @ORM\ 在每个注释句之前,一个没有。在使用终端命令时,带有 @ORM\ 的那个没有被 Doctrine 2 正确管理,而没有的那个运行得很好。即使我在 doc 和 src 中都清楚地看到有 Doctrine Common、Doctrine ORM 和 Doctrine DBAL,我也无法找到任何相关文档。他们之间不兼容吗?如何正确管理这种差异?尤其是在使用 S 以外的其他框架时(如 CI2)

谢谢

4

1 回答 1

2

长话短说,在 symfony 中,学说注释阅读器是一个AnnotationReader,而在​​ CI 中使用学说Setup::createAnnotationMetadataConfiguration助手时,SimpleAnnotationReader默认情况下你有。

通过传递false$useSimpleAnnotationReader.Setup::createAnnotationMetadataConfiguration

于 2013-08-25T07:10:56.457 回答