我将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方法,我有预期的输出而不是同一行。
你有什么想法可以解决问题吗?
谢谢
答案 0 :(得分:0)
当我查看我的问题时,我看到了问题。
学说不知道&#34; tinyint&#34;类型,所以它把它投射在&#34; boolean&#34;当它生成实体-_- 因此,我必须将我的类型转换为smallint,或者手动修改生成的实体。