试图在Zend Framework 1.11应用程序中获取非对象的属性

时间:2012-03-14 03:01:39

标签: zend-framework zend-db zend-db-table

我正在尝试使用Zend Framework 1.11,Zend_Db和Zend_Db_Select在数据库查询中创建信息表。

最初,我通过实例化我的表的新实例并使用$ table-> select()来解决这个问题。

但是,当我将其加入另一个表时,我收到一条错误消息,表示我无法使用此select()方法加入。在做了一些研究之后,我发现如果我想做这个JOIN,我必须从我的默认适配器调用select()方法。看似直截了当。

此时,我有一个模型,一个控制器和一个视图,但我认为控制器和控制器之间的某些东西“在翻译中丢失了”。我的观点。

这是模型(在Application_Model_DbTable_ActivityRequest内部):

public function getAllActivityRequests()
{

        $db = $this->getDefaultAdapter();
        $select = $db->select();

        $select->from('activityrequest');
        $select->where('isDeleted = ?','N');
        $select->where('ReqType <> ?','Purchase Product');
        $select->order('ReqTime DESC');

        $query = $select->query();
        $row = $query->fetchAll();

        return $row;
}

Controller(管理员控制器):

public function getWorkAction()
{

    $table = new Application_Model_DbTable_Activityrequest();

    $row = $table->getAllActivityRequests();

    $this->view->activityrequests = $row;

}

View(admin / get-work)的相关部分:

<?php foreach($this->activityrequests as $activity): ?>
<tr>
    <td><?= $activity->CustomerID; ?></td>
    <td><?= $activity->ReqType; ?></td>
    <td><?= $activity->ReqTime; ?></td>
    <td><?= $activity->PickupTime; ?></td>
    <td><?= $activity->AddressID; ?></td>
    <td><?= $activity->Notes; ?></td>
    <td><?= $activity->HeardAbtUs; ?></td>
    <td><?= $activity->isDeleted; ?></td>
</tr>
<?php endforeach; ?>

当我在我的模型和控制器中执行$ row的var_dump时,我看到我正在尝试传递给视图的数组。但是,一旦我进入视图,我就会在“非对象”上收到此错误。

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要设置适配器/ select / dbTable提取模式。

请参阅http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.select.fetch-mode

或者,使用Zend_Db_Table充分利用

public function getAllActivityRequests()
{
    return $this->fetchAll(
        $this->select()
            ->where('isDeleted = ?', 'N')
            ->where('ReqType <> ?', 'Purchase Product')
            ->order('ReqTime DESC')
    );
}

请参阅http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.fetch-all.select