【问题标题】:Zend_Db_Select join to Zend_Db_selectZend_Db_Select 加入 Zend_Db_select
【发布时间】:2012-08-10 14:33:54
【问题描述】:

两个模型作为Zend_Db_Select 对象返回。

然后,我需要将它们加入并一起获取数据。

class Model_User extends Abstract_Model { 
    public function sqlUser() { 
    return $this->select(array(
               'user_id', 'user.name', 'user.login', 'address.street', 'city.city_id', 'city.city_name','region.region_id', 'region.region_name'
            )) 
            ->joinUsing('address','address_id','') ->join('city', 'city.city_id = address.city_id', '')
            ->join('region', 'region.region_id = city.region_id', ''); 
    } 
} 

class Model_Technics extends Abstract_Model{ 
    public function sqlList() { 
        return $this->select()
                 // here some more sql
                 ->joinUsing('catalog_model','model_id',''); 
    }
}

然后我需要一些其他地方为每个用户获取包含所有信息的 sqlList。我不想复制所有代码,我只想通过 join 从 User 模型中加入 sql

【问题讨论】:

  • 如果您提供相关的sn-p代码会更容易回答您的问题
  • 我建议您可能想要实现某种映射器策略,或者只需选择 1 个表并通过将其他表连接到它来执行查询。你现在的情况令人不安。
  • 您可以使用 findDependentRowset 来一键获取结果,或许对您有帮助:framework.zend.com/manual/en/zend.db.table.relationships.html

标签: php zend-framework join fetch zend-db-select


【解决方案1】:

您可以遍历 zend_db_select (columns,from,joins,where) 的“部分”并想办法将它们附加到另一个查询中,但我不建议这样做。

另一种方法可能是在您要加入的模型上使用“加入”方法,该方法将获取您的选择对象并在其上运行加入方法。当然,这将取决于选择对象中已经可用的表。或者该方法可能只是传回一个定义如何连接到连接模型表的结构,您的主模型可以决定如何处理它。

有很多解决方案,但是没有真正简单的方法可以将两个 zend_db_select 对象挤在一起而不需要它们之间的一些额外逻辑。 主要缺失的部分是两个模型之间的关系信息。

我知道这不是一个完整的答案(因为我还不能发表评论),但希望它能为您指明一条听起来可用的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多