Mysql 用于连接两个表的Zend_Db查询

Mysql 用于连接两个表的Zend_Db查询,mysql,zend-framework,select,many-to-many,Mysql,Zend Framework,Select,Many To Many,我有三张桌子: 用户[id、名称、用户名、密码、角色] 事件[id、日期、位置、名称] 参与者[id、用户id、事件id] 我想选择给定用户参与的所有事件。为此,我创建了一个sql查询,并对其进行了测试并返回了所需的结果 SELECT * FROM event INNER JOIN participant ON participant.eventId = event.id WHERE participant.userId = $id 在这之后,我试着把它变成一个zend请求,根据这个站点的其他

我有三张桌子:

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

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

参与者[id、用户id、事件id]

我想选择给定用户参与的所有事件。为此,我创建了一个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(),而不是我想要的。无论我尝试对其进行什么更改,它都会返回事件表内容


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

以下是您可以尝试的:

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

我发现,当第一次开始使用ZF时,该工具非常有用。只要把它读一遍,如果你觉得有必要,再看一遍,实际创建一个示例应用程序,这样你就可以感受到它。这就是我开始使用ZF的原因,它为我提供了比以前更好的控制器和数据映射器的起点


一旦您完成了该指南,阅读参考指南就容易多了,也更有意义。

那里的代码除了构造查询之外,什么都不做。你能发布代码,说明你是如何执行它和获取结果的吗?我用您的表结构尝试了这个查询,结果很好。@drew010这可能是我问题的根源。我对zend和php都是新手。我从我找到的不同教程和zend页面上的指南中学习。我正在将我的查询转发到视图,在该视图中,我只需将其与for一起列出。那可能是我的问题。你能告诉我我需要做什么来执行它吗?在过去的30分钟里,我一直在寻找它,但到目前为止没有任何效果。@drew010好的,我刚刚找到了我的问题所在。我调用了另一种方法。因为我有一个名为getAllEvents的方法,它没有参数,但我用参数调用它,它没有抛出任何错误、警告或任何东西。我现在才看到。关于结果的执行和获取,我对代码做了一点修改,我希望这样会很好,因为现在它可以工作了。与此同时,我发布了一个答案,没有看到你已经弄明白了。希望我的回答除了你已经知道的以外,还有帮助。它是有用的。太糟糕了,我无法评价。我还阅读了Quickstart,它被证明是有用的。但问题是,在那之后,我开始了一个新的项目,开始学习acl部分,并添加了jquery(这不太好),我可能不得不在论坛上四处看看,看看是否也找到了解决这个问题的方法。因此,我返回来添加一些基本功能,发现自己在编写的代码中迷失了方向。所以现在我从零开始,先从基础开始,希望它能以这种方式工作。