zend-framework - 在Zend_Db_Select上,可以将_referenceMap与 join() 一起使用?

  显示原文与译文双语对照的内容
0 0

例如:

class Products extends Zend_Db_Table_Abstract
{
 protected $_name = 'products';
 protected $_referenceMap = array(
 'Bug' => array(
 'columns' => array('bug_id'),
 'refTableClass' => 'Bugs',
 'refColumns' => array('bug_id')
 )
 );
}
$object = new Products();
$select = $object->select()->from()->Join('Bug');

而不是定义完整的联接语句

时间:原作者:4个回答

0 0

据我所知 $_referenceMap 并不是以这种方式使用的。 $_referenceMap 定义表行与其他表的关系。

这就是关联的findDependentRowset ( ) 。findManyToManyRowset() 和 findParentRow() 在Zend_db_Table_Row_Abstract中的原因。 这些方法创建连接。

因此,要从 Bug 获取相关行,使用选择对象,可以执行类似的操作,假设产品与 Bug 有one-to-many关系;

class Products extends Zend_Db_Table_Abstract
{
 protected $_name = 'products';
 protected $_dependentTables = array('Bugs');
}
class Bugs extends Zend_Db_Table_Abstract
{
 protected $_referenceMap = array(
 'Products' => array(
 'columns' => array('bug_id')
, 'refTableClass' => 'Products'
, 'refColumns' => array('bug_id')
 )
 );
}

要获得相关行,首先必须获取父行。

$products = new Products();
$productRow = $products->find(123)
 ->current();

你可以使用Zend_Db_Select来优化联接

$select = $products->select()
 ->where('foo_bar =?', 'cheese')
 ->limit(2);

通过传递选择对象而不是规则键来查询相关行。

$bugRowset = $productRow->findDependentRowset('Bugs', 'Products', $select);

我觉得这可以工作,我明天得检查。

原作者:
0 0

这对于一行很有用,但对于整个表( 或者多行) 来说是有用的。 我通常需要影响多个行的查询。 Zend应该实现Phliplip提到的选项,或者类似的内容:

$select = $object->select()->from()->Join('Bug');

注:我的意思是,只使用一个查询

原作者:
...