当前位置: 首页 > 知识库问答 >
问题:

为什么我的Symfony/Doctrine2属性与我的CI/D2属性不同?(归根结底,第2条和第2条之间有什么区别?)

东方修谨
2023-03-14

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

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

我注意到,至少在使用annotation时,Syntax与使用Doctrine 2和Symfony2时略有不同,我想知道为什么。

我将提供一个示例:

这是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时,我的控制台中有映射错误。但是,在遵循一些TUT时,我最终删除了所有ORM\(以及相应的使用原则\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;

为什么?有什么区别?

编辑:确切地说,我尝试了两个实体,具有相同的结构,一个在avery注释句之前带有@ORM\,另一个没有。当使用终端命令时,带有@ORM\的没有被教义2正确管理,没有的工作得非常好。即使我在文档和src中清楚地看到有共同主义、ORM主义和DBAL主义,我也找不到任何关于这一点的留档。它们彼此之间不兼容吗?如何妥善管理这种差异?特别是在使用S之外的其他框架时(如CI2)

谢谢你

共有1个答案

张宣
2023-03-14

长话短说,在symfony中,条令注释读取器是注释读取器,而在使用条令设置::createAnnotationMetadataConfiguration帮助程序的CI中,默认情况下您拥有SimpleAnnotationReader

通过将false传递给Setup::createAnnotationMetadataConfiguration的第五个参数$useSimpleAnnotationReader,您应该能够拥有与symfony中相同的行为。

 类似资料:
  • 问题内容: 对于“属性”和“属性”之间的区别,我通常感到困惑,并且找不到很好的资源来简洁地详细说明这些区别。 问题答案: 属性是一种特殊的属性。基本上,当Python遇到以下代码时: 它查找中,然后检查,看它是否有一个,或方法- 如果这样做,这是一个性质。如果它 是 一个属性,则不仅会返回该对象(就像对其他任何属性一样),还会调用该方法(因为我们一直在进行查找),并返回该方法返回的内容。 有关Py

  • 问题内容: 在jQuery 1.6.1中进行更改之后,我一直在尝试定义HTML中属性和属性之间的差异。 查看jQuery1.6.1发行说明中的列表(在底部附近),似乎可以对HTML属性和属性进行如下分类: 属性:所有具有布尔值或UA计算得出的值,例如selectedIndex。 属性:可以添加到既不是布尔也不包含UA生成值的HTML元素中的“属性”。 有什么想法吗? 问题答案: 在编写HTML源代

  • 问题内容: 可以在这里找到代码: 我发现有内标记,也有内标签。它们都是必需的吗?(在这种情况下,CSS似乎覆盖了HTML属性)关于它们之间的区别是否有任何解释? 问题答案: 我检查了文档,但是它们并不清楚如果同时设置了它们。 那藏在这里的某个地方: UA可以选择使用HTML源文档中的表示属性。如果是这样,则将这些属性转换为对应的CSS规则,其特异性等于0,并且将其视为在作者样式表的开头插入。因此,

  • 问题内容: 在jQuery 1.6.1中进行更改之后,我一直在尝试定义HTML中属性和属性之间的差异。 查看jQuery1.6.1发行说明中的列表(在底部附近),似乎可以对HTML属性和属性进行如下分类: 属性:所有具有布尔值或UA计算得出的值,例如selectedIndex。 属性:可以添加到既不是布尔也不包含UA生成值的HTML元素中的“属性”。 有什么想法吗? 问题答案: 在编写HTML源代

  • 问题内容: 我不太了解它们之间的区别,因此我对这两个软件包有一些疑问。 在Google上浏览了一下之后,似乎Oracle决定使用JDK7版本的更新和增强软件包来更新该软件包。 封装的性能与封装相比如何? 从到有什么大变化?(例如新方法,功能) 为什么必须对原始软件包进行更新? 如今是该软件包的代名词吗? 这并不是我想在代码中使用旧版包,我对此真的很好奇。请告诉我他们的区别? 问题答案: Java最

  • 问题内容: 从一些初始教程中,我看到属性属于类,并且本质上是C ++世界中使用的“全局变量”(在几年前进行了编码)。我也将变量视为更多的“本地”实体,仅在方法中使用/存储信息。 然后我遇到了这个Quora线程:https : //www.quora.com/Apple-Swift-programming-language/What-is-the-difference- between-a-prop