我正在尝试使用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时,我看到我正在尝试传递给视图的数组。但是,一旦我进入视图,我就会在“非对象”上收到此错误。
任何帮助都将不胜感激。
谢谢!
答案 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