我正在研究doctrine 2(Beta3)沙箱,并尝试应用Zend Framework编码约定,将一个前导下划线放置到私有类成员。当我查询地址,而其私人成员没有被强调时,我按预期检索对象。当我添加下划线,重新生成并重新填充数据库,然后运行相同的查询时,我收到以下错误消息:
PHP注意:未定义的索引:id在...第184行的Doctrine / ORM / Internal / Hydration / AbstractHydrator.php
PHP致命错误:未捕获异常'Doctrine \ DBAL \ DBALException',并显示消息'请求未知列类型'。 in ... Doctrine / DBAL / DBALException.php:81
DQL查询:
$q = $em->createQuery('select u from Entities\Address u where u.id = ?1');
$q->setParameter(1, '1');
$address = $q->getSingleResult();
ZFed地址类:
<?php
namespace Entities;
/** @Entity @Table(name="addresses") */
class Address
{
/**
* @Id @Column(type="integer", length=11, name="id")
* @GeneratedValue(strategy="AUTO")
*/
private $_id;
/** @Column(type="string", length=255, name="street") */
private $_street;
public function getId()
{
return $this->_id;
}
public function getStreet()
{
return $this->_street;
}
public function setStreet($street)
{
$this->_street = $street;
}
}
您必须在所有DQL查询前写_是。
变量前面的下划线是某种匈牙利符号,我们作为Doctrine团队不喜欢。就我所理解的情况而言,即使是Zend Framework也会放弃新代码的风格。许多其他项目都做了同样的事情,PEAR2甚至在这方面改变了标准。