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,或者手动修改生成的实体。
我将 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,或者手动修改生成的实体。