Doctrine2 returns 相同的结果

Doctrine2 returns the same results

我将 doctrine2 与 MariaDB 和 ZF2 一起使用。 我有一个非常奇怪的问题,按原则返回的值与方法 find、findBy、findAll、query 等相同...

我有以下table

CREATE TABLE `category` (
   `catid` tinyint(4) NOT NULL,
   `name` varchar(45) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `category` (`catid`, `name`) VALUES
(1, 'Animaux'),
(2, 'Assurance - Mutuelle'),
(3, 'Auto - Moto');

我使用这个脚本生成实体

./vendor/doctrine/doctrine-module/bin/doctrine-module orm:convert-mapping --namespace="Database\Entity\" --force  --from-database annotation ./module/Database/src/
./vendor/doctrine/doctrine-module/bin/doctrine-module orm:generate-entities ./module/Database/src/ --generate-annotations=true

在控制器中,我执行这段代码

    /** @var \Doctrine\ORM\EntityManager[] $categoriesObject */
    $categoriesObject = $this->getObjectManager()
        ->getRepository('Database\Entity\Category')
        ->findBy(array(), array('name' => 'ASC'));

    $categories = array();
    /** @var \Database\Entity\Category $value */
    foreach($categoriesObject as $value) {
        print_r($value);
        $categories[$value->getCatid()] = $value->getName();
    }
    $form->get('category')->setValueOptions($categories);

关于信息,由 doctrine

生成的类别 class
<?php

namespace Database\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Category
 *
 * @ORM\Table(name="category")
 * @ORM\Entity
 */
class Category
{
    /**
     * @var boolean
     *
     * @ORM\Column(name="catid", type="boolean", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $catid;

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



    /**
     * Get catid
     *
    * @return boolean
     */
    public function getCatid()
    {
        return $this->catid;
    }

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

        return $this;
    }

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

使用这段代码,当我执行请求时,我得到以下结果:

Database\Entity\Category Object ( [catid:Database\Entity\Category:private] => 1 [name:Database\Entity\Category:private] => Animaux ) Database\Entity\Category Object ( [catid:Database\Entity\Category:private] => 1 [name:Database\Entity\Category:private] => Animaux ) Database\Entity\Category Object ( [catid:Database\Entity\Category:private] => 1 [name:Database\Entity\Category:private] => Animaux )

现在,奇怪的是,如果我从 class 类别中删除 $catid 字段和 getCatid 方法,我会得到预期的输出,而不是同一行。

您知道问题出在哪里吗?

谢谢

在我看我的问题的时候,我看到了问题。

Doctrine 不知道 "tinyint" 类型,因此它在生成实体 -_- 时将其转换为 "boolean" 因此,我必须将我的类型转换为 smallint,或者手动修改生成的实体。