【问题标题】:Doctrine2 returns the same resultsDoctrine2 返回相同的结果
【发布时间】:2015-12-24 16:39:21
【问题描述】:

我将教义2 与 MariaDB 和 ZF2 一起使用。 我有一个非常奇怪的问题,即学说返回的值与方法 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);

并且作为信息,由学说生成的 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] => 1 [名称:数据库\实体\类别:私有] => Animaux ) 数据库\实体\类别对象 ( [catid:Database\Entity\Category:private] => 1 [名称:数据库\实体\类别:私有] => Animaux ) 数据库\实体\类别对象 ( [catid:Database\Entity\Category:private] => 1 [名称:数据库\实体\类别:私有] => Animaux )

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 橡皮鸭调试!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多