我知道这似乎是一个非常基本的问题,但请在投票之前阅读到最后。
在使用 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)
谢谢