4

我正在研究学说 2 (Beta3) 沙箱,并尝试将 Zend Framework 编码约定应用到私有类成员中放置前导下划线。当我查询地址时,虽然它的私有成员没有下划线,但我按预期检索对象。当我添加下划线、重新生成并重新填充数据库,然后运行相同的查询时,我收到以下错误消息:

PHP 通知:未定义索引:id in ... Doctrine/ORM/Internal/Hydration/AbstractHydrator.php 第 184 行

PHP 致命错误:未捕获的异常“Doctrine\DBAL\DBALException”与消息“请求的未知列类型”。在 ... 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;
    }

}
4

1 回答 1

3

您必须在所有 DQL 查询前面写 _ 是的。

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

于 2010-09-01T05:43:34.760 回答