2015-12-17 37 views
2

我有以下四个字段的实体:$id, $name, $flagFileName$inUseSymfony2:存储库的findAll()返回同一个实体的多个实例,而不是所有实体

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Language 
* 
* @ORM\Table(name="language", uniqueConstraints={@ORM\UniqueConstraint(name="name_UNIQUE", columns={"name"})}, indexes={@ORM\Index(name="key_in_use", columns={"in_use"})}) 
* @ORM\Entity 
*/ 
class Language 
{ 
    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="id", type="boolean", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

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

    /** 
    * @var string 
    * 
    * @ORM\Column(name="flag_file_name", type="string", length=6, nullable=false) 
    */ 
    private $flagFileName; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="in_use", type="integer", nullable=true) 
    */ 
    private $inUse; 

    /** 
    * @return string 
    */ 
    public function getFlagFileName() 
    { 
     return $this->flagFileName; 
    } 

    /** 
    * @param string $flagFileName 
    * @return Language 
    */ 
    public function setFlagFileName($flagFileName) 
    { 
     $this->flagFileName = $flagFileName; 
     return $this; 
    } 

    /** 
    * @return boolean 
    */ 
    public function isId() 
    { 
     return $this->id; 
    } 

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

    /** 
    * @return int 
    */ 
    public function getInUse() 
    { 
     return $this->inUse; 
    } 

    /** 
    * @param int $inUse 
    * @return Language 
    */ 
    public function setInUse($inUse) 
    { 
     $this->inUse = $inUse; 
     return $this; 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @param string $name 
    * @return Language 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
     return $this; 
    } 

    function __toString() 
    { 
     return $this->getName(); 
    } 

} 

而这就是我目前在映射表(语言): description

该表已经在我的MySQL数据库的结构如下:

CREATE TABLE `language` (
    `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(60) NOT NULL, 
    `flag_file_name` char(6) NOT NULL, 
    `in_use` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name_UNIQUE` (`name`), 
    KEY `key_in_use` (`in_use`) 
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 

我的问题是,当我尝试从存储库中获取所有语言时,我得到第一条记录的N个实例,而不是所有记录(其中N是“语言”表中的记录数)。

要清楚,当我运行出发,按照我的控制器的动作的第一个指令:

$this->getDoctrine()->getRepository("AppBundle:Language")->findAll() 

我得到如下:

enter image description here

我有望获得什么,是一个充满了所有语言的数组,不仅是第6次重复的第一种语言!为什么会发生?

+6

为什么你输入$ id作为布尔值? – scoolnico

+0

我建议检查你的模板代码。你可能会得到四个不同的实体,但是你的显示器很混乱。 – Cerad

+0

我认为教义不能区分另一个,因为所有的条目都有相同的id值 - 是真的。 – Alex

回答

2

如果您自动生成你的实体,它认为你的id场是因为你将它定义为一个tinyint(3)一个布尔值。如果没有,你的定义不正确,应该是@ORM\Column(name="id", type="integer", nullable=false)

此外isId()函数应该是getId()setId()函数应该被删除。所以你应该看到这个:

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

您的$id注释中存在拼写错误。类型必须为"integer""boolean"

相关问题