Symfony2:Repository的findAll()返回同一实体的多个实例,而不是所有实体

时间:2015-12-17 12:25:19

标签: php mysql symfony doctrine-orm

我有以下四个字段的实体:$id, $name, $flagFileName$inUse

<?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是“语言”表中的记录数)。 / p>

为清楚起见,当我将以下内容作为控制器操作中的第一条指令运行时:

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

我得到以下内容:

enter image description here

我期望收到的是一个充满所有语言的数组,而不仅仅是第一个重复6次的语言!为什么会这样?

2 个答案:

答案 0 :(得分:2)

如果您自动生成了实体,则认为您的id字段是布尔值,因为您将其定义为tinyint(3)。如果没有,则您错误地定义了它,它应该是@ORM\Column(name="id", type="integer", nullable=false)

此外,isId()函数应为getId(),并且应移除setId()函数。所以你应该看到这个:

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

答案 1 :(得分:1)

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