2012-08-10 78 views
1

两个模型返回为Zend_Db_Select对象。Zend_Db_Select加入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与每个用户的所有信息。我不想复制所有代码,我只想通过加入从用户模型加入sql

+1

如果您提供了相关的代码片段 – Don 2012-08-10 14:40:14

+1

,那么回答您的问题会容易得多,我会建议您可能要实施某种有针对性的映射策略,或者只需选取一个表并通过加入另一个表来执行查询表格。你现在拥有的是令人不安的。 – RockyFord 2012-08-10 16:04:53

+1

您可以使用findDependentRowset在一次选择时获得bove结果,也许它可以帮助您:http://framework.zend.com/manual/en/zend.db.table.relationships.html/ – 2012-08-16 13:25:35

回答

0

您可以遍历zend_db_select(列,from,joins,where)的“节”,并设法将它们追加到另一个查询,但我不会建议它。

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

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

我知道这不是一个完整的答案(因为我还不能评论),但希望它会指向你听起来有用的路径。

相关问题