2010-08-31 38 views
4

我正在通过doctrine 2(Beta3)沙盒,并试图应用Zend框架将编码约定放置到私有类成员的前导下划线。当我查询地址,而其私人成员不强调,我按预期检索对象。当我添加下划线时,重新生成并重新填充数据库,然后运行相同的查询,我收到以下错误消息:doctrine 2注解和Zend框架下划线约定

PHP注意:未定义索引:id in ... Doctrine/ORM/Internal/Hydration/AbstractHydrator。 php 184行 PHP致命错误:未知的异常'Doctrine \ DBAL \ DBALException',消息'请求的未知列类型'。在...主义/ 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 Address类:

<?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; 
    } 

} 
+0

啊我看到'从实体选择你\地址你在哪里u._id =?1'的作品 - 注意_id。这是如何工作的? – waigani 2010-08-31 22:46:20

回答

3

你会写_眼前的一切你的DQL查询是。

变量前面的下划线是某种匈牙利符号,我们作为学说团队不喜欢。就我所知,即使Zend Framework也会为新代码放弃这种风格。许多其他项目也是如此,PEAR2甚至在这方面改变了他们的标准。

+1

民意调查:是否应该删除非公共元素的下划线前缀? http://zend-framework-community.634137.n4.nabble.com/Poll-Should-underscore-prefixing-of-non-public-elements-be-dropped-td2322936.html#none 投票: https://spreadsheets.google.com/viewform?formkey=dEZOTGpMdjhzZDlmZGNMZVF0WnFTV2c6MQ PS:Trust beberlei,他是Doctrine2 Core-Dev;) – 2010-09-01 07:08:56

+0

啊,很高兴知道 - 再见强调。我可以指出你对我的下一个问题:http://stackoverflow.com/questions/3624206/require-once-missing-doctrine-zend-framework – waigani 2010-09-02 06:06:46

+0

但我想知道的是,大多数Doctrine的代码是用下划线该类为属性的前缀。我还为私有/受保护的类属性使用下划线,是否有机会在实体内强调类属性的支持? – 2010-10-29 01:31:57