繁体   English   中英

zend框架从两个表中获取数据

[英]zend framework get data from two tables

如果我用

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

我得到了正确的record(s)但是由于array()从表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'));

我收到一个错误:

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

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

假设您使用的是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才能加入选择查询。希望对您有所帮助。

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上下文。 意思是,您正在告诉框架您要使用特定表,而不关心其他表。

如果要进行连接,则应在上下文阶梯中上一步,并使用Db上下文,可以使用getAdapter()方法获得该getAdapter()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM