列名是否必须匹配Zend中的变量名?

时间:2014-10-01 10:40:55

标签: php zend-framework2

我正在尝试使用Zend 2.3构建应用程序。它基于(并且非常类似)Zend教程的Album application。我的应用程序处理Person对象而不是Album对象。

当我开始使用时,我在ID列中输入了名称' ID'而不是' id'就像在教程中一样。因此,Person类中的extractArray函数看起来像这样:

public function exchangeArray($data)
{
    $this->id = (isset($data['ID'])) ? $data['ID'] : null; // <- DB column name is ID, not id
    $this->name = (isset($data['name'])) ? $data['name'] : null;
    $this->initials  = (isset($data['initials'])) ? $data['initials'] : null;
    $this->title  = (isset($data['title'])) ? $data['title'] : null;
    $this->description  = (isset($data['description'])) ? $data['description'] : null;
    $this->email  = (isset($data['email'])) ? $data['email'] : null;
}

我无法让它发挥作用。添加或删除人员进展顺利。但是当我尝试编辑Person时,它被视为插入。经过几个小时的调试,我能够建立的就是在表单验证过程中,Person对象的id变为null,导致farmework认为记录是新的而不是编辑的。我真的不知道如何更准确。我没有对表单的验证做任何想象,它与示例相册应用程序完全一样。

我将列名更改为&#39; id&#39;并相应地更新了代码,一切正常。这似乎表明......到底是什么? DB名称必须是小写?不太可能。 DB名称必须与变量名称相同?有点可能,但对我来说似乎很奇怪。

我的问题是:我的第一次尝试出了什么问题,除了更改列名之外还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:0)

不是真的。当你试图保存时会出现问题,因为你将传递一个类,并且属性与列名不匹配,但是对于fetch来说,你的工作方式是正常的,它应该可以工作。