【问题标题】:doctrine 2 Annotations and Zend Framework underscore convention学说 2 注释和 Zend 框架强调约定
【发布时间】:2011-04-06 12:52:55
【问题描述】:

我正在研究学说 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;
    }

}

【问题讨论】:

  • 啊,我看到 'select u from Entities\Address u where u._id = ?1' 有效 - 注意 _id。这就是它的工作方式吗?

标签: zend-framework annotations doctrine naming-conventions dql


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2012-05-24
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多