Doctrine2返回相同的结果

时间:2015-12-24 16:39:22

标签: php zend-framework doctrine-orm zend-framework2 doctrine

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

我有下表

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

生成的Category类
<?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;
    }
}

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

  

数据库\实体\类别对象   (       [catid:Database \ Entity \ Category:private] =&gt; 1       [name:Database \ Entity \ Category:private] =&gt; ANIMAUX   )   Database \ Entity \ Category对象   (       [catid:Database \ Entity \ Category:private] =&gt; 1       [name:Database \ Entity \ Category:private] =&gt; ANIMAUX   )   Database \ Entity \ Category对象   (       [catid:Database \ Entity \ Category:private] =&gt; 1       [name:Database \ Entity \ Category:private] =&gt; ANIMAUX   )

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

你有什么想法可以解决问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

当我查看我的问题时,我看到了问题。

学说不知道&#34; tinyint&#34;类型,所以它把它投射在&#34; boolean&#34;当它生成实体-_- 因此,我必须将我的类型转换为smallint,或者手动修改生成的实体。