Mysql 用于连接两个表的Zend_Db查询
我有三张桌子: 用户[id、名称、用户名、密码、角色] 事件[id、日期、位置、名称] 参与者[id、用户id、事件id] 我想选择给定用户参与的所有事件。为此,我创建了一个sql查询,并对其进行了测试并返回了所需的结果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请求,根据这个站点的其他
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(这不太好),我可能不得不在论坛上四处看看,看看是否也找到了解决这个问题的方法。因此,我返回来添加一些基本功能,发现自己在编写的代码中迷失了方向。所以现在我从零开始,先从基础开始,希望它能以这种方式工作。