【问题标题】:Possible to use _referenceMap with join() on Zend_Db_Select?可以在 Zend_Db_Select 上将 _referenceMap 与 join() 一起使用吗?
【发布时间】:2010-06-04 16:13:20
【问题描述】:

例子:

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');

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

【问题讨论】:

  • 太棒了 :) 刚刚获得 Tumbleweed 徽章!
  • 我也在寻找这个答案,或者使用 $_referenceMap 做类似的事情

标签: zend-framework join zend-db


【解决方案1】:

据我所知,$_referenceMap 没有以这种方式使用。 $_referenceMap 定义了一个表行与其他表的关系。

这就是为什么在 Zend_db_Table_Row_Abstract 中可以找到相关的 findDependentRowset()、findManyToManyRowset() 和 findParentRow()。这些方法创建联接。

所以要从 Bugs 中获取依赖行,使用一个选择对象,你会做这样的事情,假设 Products 与 Bugs 具有一对多的关系;

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);

我认为这行得通,我明天早上必须检查一下。

【讨论】:

    【解决方案2】:

    这对一行有用,但不适用于整个表(或几行)。我通常需要影响不止一行的查询...... Zend 应该实现 Phliplip 提到的选项或类似的东西:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2014-01-10
      • 1970-01-01
      • 2012-06-22
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多