1

我有 3 张桌子:

用户[id,名称,用户名,密码,角色]

事件[id,日期,位置,名称]

参与者[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() 。无论我尝试对其进行更改,它总是返回事件表内容。

我的问题是:有谁知道为什么会发生这种情况?

4

1 回答 1

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 分离之后,您的控制器将向负责与数据库通信并处理结果的数据映射器请求数据。控制器获取从映射器返回的数据,然后将其分配给视图。您永远不想从视图中获取数据,只显示控制器提供给它的数据。

我发现Zend Framework 快速入门在第一次开始使用 ZF 时非常有用。只需阅读一遍,如果您觉得有必要,请再次阅读并实际创建示例应用程序,以便您可以感受一下。这就是我开始使用 ZF 的方式,它为我提供了一个比以前更好的控制器和数据映射器起点。

完成该指南后,阅读参考指南会容易得多,也更有意义。

于 2012-07-21T19:59:25.440 回答