我有3张桌子:
用户[id,名称,用户名,密码,角色]
事件[id,date,location,name]
参与者[id,userId,eventId]
我想选择给定用户参与的所有事件。为此我创建了一个sql查询,我测试并返回了所需的结果。
SELECT * FROM event
INNER JOIN participant ON participant.eventId = event.id
WHERE participant.userId = $id
在此之后,我尝试将其转换为zend请求,该请求应根据本网站的其他帖子进行操作。
public function getEvents($id)
{
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select();
$select->from('event')
->joinInner('participant','participant.eventId = event.id')
->where('participant.userId = ?', $id);
$res = $db->query($select)->fetchAll();
return $res;
}
我正在使用" PDO_MYSQL"作为适配器,我不会有任何插入表,选择整个表或只是特定行的问题。但上面的代码似乎做了一个简单的fatchall()内容我想要的东西。无论我尝试更改它,它总是返回事件表内容。
我的问题是:有没有人知道为什么会发生这种情况?
答案 0 :(得分:0)
您可以尝试以下方法:
// this is the action in your controller
public function testAction()
{
// call getEvents, assign the result to the view
$this->view->results = $this->_getEvents(1);
}
protected function _getEvents($id)
{
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->select()
->from('event')
->joinInner('participant','participant.eventId = event.id')
->where('participant.userId = ?', $id);
//echo $select; // you can echo the select object to see the resulting query
$results = $select->query(); // actually execute the query
return $results->fetchAll(); // return all results as an array to caller
}
然后,这里是一些放在视图脚本中的示例代码:
<?php if (sizeof($this->results) == 0): ?>
<strong>No results found!</strong>
<?php else: ?>
Found <?php echo sizeof($this->results) ?> results.<br /><br />
<?php foreach($this->results as $result): ?>
On <?php echo $result['date'] ?> the user participated in <em><?php echo $result['name'] ?></em> @ <?php echo $result['location'] ?><br />
<?php endforeach; ?>
<?php endif; ?>
最后,当您越来越熟悉ZF时,您将需要创建用于获取数据的模型和数据映射器类。您的getEvents
函数将驻留在数据映射器类中。
然后,在MVC分离之后,您的控制器将从数据映射器请求数据,该数据映射器负责与DB通信并处理结果。控制器获取映射器返回的数据,然后将其分配给视图。您永远不会想要从视图中获取数据,只显示控制器为其提供的数据。
我发现Zend Framework Quickstart在首次使用ZF时非常有帮助。只需阅读一次,如果您觉得有需要,请再次浏览并实际创建示例应用程序,以便您可以感受到它。这就是我以前用ZF开始的,它给了我一个比以前更好的控制器和数据映射器的起点。
完成该指南后,阅读参考指南会更容易,也更有意义。