我在翻译此查询以使用ZF时遇到一些问题Zend_Db_Select
:
SELECT b.id, b.title, b.description FROM memberships AS m JOIN blogs AS b ON b.id = m.blog_id WHERE m.user_id = ? ORDER BY m.created LIMIT 0, 30
(此查询有效并返回结果)
Memberships
是blogs
和之间的链接表users
.这是一件简单的| id | blog_id | user_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: Select query cannot join with another table
发生在第211行
D:\...\library\Zend\Db\Table\Select.php
.
谢谢你的帮助.
您还可以通过添加setIntegrityCheck(false)来使用传统的$ 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
从表对象中检索时,该语句将限于我认为的那个表.这些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( ...