7

我在将此查询转换为使用 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

(此查询有效并返回结果)

Membershipsblogs是和之间的链接表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

谢谢你的帮助。

4

2 回答 2

15

您还可以通过添加 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
于 2009-02-06T23:28:35.973 回答
9

从您的表对象中检索时,该语句将仅限于我认为的该表。这些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( ...
于 2009-02-06T12:47:34.100 回答