Zend framework 将查询转换为使用Zend_Db_Select

Zend framework 将查询转换为使用Zend_Db_Select,zend-framework,zend-db-table,zend-db-select,Zend Framework,Zend Db Table,Zend Db Select,我在翻译此查询以使用ZF的Zend_Db_Select时遇到一些问题: 此查询工作并返回结果 成员资格是博客和用户之间的链接表。这是一个简单的| id |博客| id |用户| id |事件 以下是我目前掌握的情况: // $table = Zend_Db_Table instance, $id = a user id $select = $table->select() ->from(array('m' => 'memberships'), array('b.id', 'b.

我在翻译此查询以使用ZF的Zend_Db_Select时遇到一些问题:

此查询工作并返回结果

成员资格是博客和用户之间的链接表。这是一个简单的| id |博客| id |用户| id |事件

以下是我目前掌握的情况:

// $table = Zend_Db_Table instance, $id = a user id
$select = $table->select()
->from(array('m' => 'memberships'), array('b.id', 'b.title', 'b.description'))
->join(array('b' => 'blogs'), 'b.id = m.blog_id')
->where('m.user_id = ?', (int) $id)
->order('m.created DESC')
->limit(0, 30);
这对我来说是一个奇怪的错误:

0:选择查询无法与其他表联接

发生在D:\…\library\Zend\Db\Table\Select.php的第211行


谢谢您的帮助。

从表对象检索时,我认为语句将仅限于该表。Zend_Db_Table::select方法返回一个Zend_Db_Table_select对象,它是Zend_Db_select的子类,并施加此限制。请尝试以下方法:

$db = Zend_Db::factory( ...options... );
$select = new Zend_Db_Select($adapter);
$select->from( 'my_table_name' )->join( ...
如果您愿意,以下内容应是等效的:

$db = Zend_Db::factory( ...options... );
$db->select()->from( 'my_table_name' )->join( ...

您还可以通过添加setIntegrityCheckfalse使用传统的$model->select对象,如下所示

$select = $table->select()
->setIntegrityCheck(false)
->from(array('m' => 'memberships'), array('b.id', 'b.title', 'b.description'))
->join(array('b' => 'blogs'), 'b.id = m.blog_id')
->where('m.user_id = ?', (int) $id)
->order('m.created DESC')
->limit(0, 30);
这将禁用引发异常的检查:

#0: Select query cannot join with another table

这是我想要的。但是,它似乎以数组而不是对象的形式返回结果?没问题,只是想知道为什么。事实上,不应该。如何执行select语句$选择->查询应返回PDO_语句或Zend_Db_语句。
#0: Select query cannot join with another table