【问题标题】:zend framework get data from two tableszend框架从两个表中获取数据
【发布时间】:2013-12-13 10:18:33
【问题描述】:

如果我使用

 $query = $this
        ->select()
        ->from(array('a' => 'aanvragen'))
        ->join(array('v' => 'verloven'),
                   'v.aanvraag_id = a.id' ,array())
        ->where('a.personeelslid_id = :personeelslid_id')
        ->where('v.type = 3')
        ->bind(array(
            'personeelslid_id' => $this->_personeelslid->id
        ))
    ;
    return $this->fetchAll($query, array('aanvragen','verloven'));

由于array(),我得到了正确的record(s),但表verloven(v) 中没有数据。

但是如果我删除空数组,例如:

     $query = $this
        ->select()
        ->from(array('a' => 'aanvragen'))
        ->join(array('v' => 'verloven'),
                   'v.aanvraag_id = a.id' )
        ->where('a.personeelslid_id = :personeelslid_id')
        ->where('v.type = 3')
        ->bind(array(
            'personeelslid_id' => $this->_personeelslid->id
        ))
    ;
    return $this->fetchAll($query, array('aanvragen','verloven'));

我收到一个错误:

选择查询不能与另一个表连接。

如何从两个表中获取数据?

【问题讨论】:

    标签: mysql database zend-framework frameworks


    【解决方案1】:

    假设您使用的是 zf 1+ ,您可以从您的模型中执行以下操作,

     $sql=$this->select()
                ->setIntegrityCheck(false)
                ->from(array('a' => 'aanvragen'),array('field1','field2'))               
                ->join(array('v' => 'verloven'),'v.aanvraag_id = a.id',array('field3'))  
                ->where('a.personeelslid_id = :personeelslid_id')
                ->where('v.type = 3')   
                ->group('fieldname')
                ->order('fieldname');          
    
            $resultSet = $this->fetchAll($sql);
            return $resultSet; 
    

    您需要将 setIntgrityCheck 设置为 false 才能加入选择查询。 希望这会有所帮助..

    【讨论】:

    【解决方案2】:

    AFAIK,如果你真正需要的是跨表的东西,你几乎应该永远设置setIntegrityCheck(false)

    正确的做法是使用Zend_Db_Adapter

    $query = $this
            ->getAdapter()
            ->select()
            ->from(array('a' => 'aanvragen'))
            ->join(array('v' => 'verloven'),
                       'v.aanvraag_id = a.id' ,array())
            ->where('a.personeelslid_id = :personeelslid_id')
            ->where('v.type = 3')
            ->bind(array(
                'personeelslid_id' => $this->_personeelslid->id
            ))
        ;
        return $this->getAdapter()->fetchAll($query, array('aanvragen','verloven'));
    

    这背后的原因是,您使用的(假设您的模型从 Zend_Db_Table_Abstract 扩展而来)是 Table 上下文。这意味着,您是在告诉框架,您想使用特定的表,而不关心其他表。

    如果要进行join,则应在上下文阶梯中上一层,使用Db上下文,可通过getAdapter()方法获取。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多