Zend DB:空值

时间:2010-11-15 16:52:09

标签: php zend-framework zend-db

如果有人可以解释为什么这个查询返回空值,我将不胜感激。 This query works fine when I use the fetchRow() method.

public function getCustomerRowWithAddress($customer_id)
{

    $select = $this->select()->setIntegrityCheck(false);

    $select->from('irh_TV.irh_site_location AS SL', array('name as location_name', 'start_date', 'end_date', 'service_pack_id', 'stb_id'));
    $select->joinLeft('irh_TV.irh_customers AS C', 'C.customer_id = SL.customer_id AND C.active = 1 AND C.site_id = SL.site_id', 
        array('customer_id','surname', 'title', 'site_id', 'first_name', 'company', 'business_no', 'home_no', 'mobile_no', 'email', 'address_id'));
    $select->joinLeft('irh_TV.tv_stb_data AS TV', 'TV.site_id = SL.site_id AND SL.stb_id = TV.id', array('user_id as mac_address'));
    $select->joinLeft('irh_TV.irh_address AS AD', 'C.address_id = AD.id', array('address_line1', 'address_line2', 'town', 'county', 'country', 'postcode'));
    $select->where("SL.customer_id = $customer_id");   
    //if($_REQUEST['d'] == 1) { echo $select; }
    _syslog($select);
    //$_rows = $this->fetchRow($select);
    $_rows = $this->fetchAll($select);

    return $_rows;
}

编辑:

我尝试像这样访问行集:

    $model      = _getModel();
    $table      = $model->getTable("irh_customers");
    $customer_address_row = $table->getCustomerRowWithAddress($id);
    //$customer_address_row = $table->getCustomerRowsWithAddress($id);
    //$this->_row = $customer_address_row ? $customer_address_row : $table->getRowById($id);

    $row_count = count($customer_address_row);
    if($row_count > 0){
        ///$rows = $this->_row->toArray();
        $this->exists = true;
        $this->id = $id;
        if($row_count > 1){

            //$array = $customer_address_row->toArray();
            foreach($customer_address_row->toArray() as $row){

                foreach($row as $k => $v){
                    //if($k != 'stb_id' || $k != 'mac_address'){
                        if(!isset($this->k[$k])){
                            $this->k[$k] = $v;
                        }
                    /*}else if($k == 'stb_id'){
                        $this->k['stb_id'][] = $v;
                    }
                    else if($k == 'mac_address'){
                        $this->k['mac_address'][] = $v;
                    }*/
                }
            }
        }else{
            foreach($customer_address_row->toArray() as $k => $v)
            {
                _syslog($v);
                $this->k[$k] = $v;
            }
        }
   }

3 个答案:

答案 0 :(得分:1)

fetchRow()返回Zend_Db_Table_Row_Abstract的对象。 fetchAll()返回一个数组。

答案 1 :(得分:0)

Zend_Db_Table_Rowset_AbstracttoArray方法,以未记录的奇怪方式运行。如果在调用之前没有遍历行,则它将不会像预期的那样行为。

所以解决方案是直接迭代思考行集(可以迭代):

foreach ($customer_address_row as $row) {
    //Do whatever you need with the row here
}

希望这有帮助。

答案 2 :(得分:0)

我已经修好了。只需先检查一个数组,然后摆脱第二行计数检查及其else语句。

     if($row_count > 0){
        $rows = $this->_row->toArray();
        $this->exists = true;
        $this->id = $id;
        if(is_array($rows[0]) && isset($rows)){
            foreach($rows as  $i => $row){

                foreach($row as $k => $v){
                    //Whatever
                }
            }

        }