ZF2多个表连接在一个模型中,从连接表中获取列

时间:2014-04-07 19:42:54

标签: php mysql zend-framework zend-framework2

所以这是我的问题:

public function fetchAd($adID){
    $row = $this->tableGateway->select(function(Select $select) use ($adID){
        $select->join('adDetails','adDetails.adID = ads.adID',array('*'),'inner');
        $select->where(array('ads.adID' => $adID));
    });

    return $row->current();
}

所以我正在做什么我正在查询ad表并加入adDetails表以便我获取某个AD的详细信息,问题是实体{{ 1}}属于我正在进行查询的模型,它没有来自AD表的列名(变量);所以它只返回adDetails表中的列,因为实体在AD

中没有这些字段

我试图扩展exchangeArray()实体以使用AD实体,但它现在返回到对象数组但是字段为null,因为它可以填充它们。

那么,我应该怎么做呢,为了让我在模型中为所有要加入的表提供所有列?

我也计划加入其他桌子。

2 个答案:

答案 0 :(得分:2)

好的我解决了这个问题,问题是它将返回一个数组,并且它不会使用ORM样式,但是它完成了工作,因为现在ZF2中不支持ZF1中的关系;

    use Zend\Db\Sql\Sql,
        Zend\Db\Sql\Where;
    $sql = new Sql($this->tableGateway->getAdapter());
    $select = $sql->select();
    $select->from($this->tableGateway->table)
          ->join('adDetails','adDetails.adID = ads.adID',array('*'),'inner');

    $where = new  Where();
    $where->equalTo('ads.adID', $adID) ;
    $select->where($where);

    $statement = $sql->prepareStatementForSqlObject($select);
    $result = $statement->execute();

    return $result->current();

答案 1 :(得分:0)

public function fetchJoin() 
{ 
    $select = new \Zend\Db\Sql\Select; 
    $select->from('tablea a'); 
    $select->columns(array('*')); 
    $select->join('tableb b', "b.id = a.b_id", array('field1'), 'left'); 
    // to display query string remove comment in next line
    //echo $select->getSqlString(); 
    $resultSet = $this->tableGateway->selectWith($select); 
    return $resultSet; 
}