2010-11-15 2 views
1

Я был бы признателен, если бы кто-нибудь мог объяснить, почему этот запрос возвращает нулевые значения. This query works fine when I use the fetchRow() method.Zend DB: null values ​​

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; 
} 

EDIT:

я пытаюсь получить доступ к набору строк так:

$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; 
      } 
     } 
    } 
+0

Уверена, что он возвращает NULL? fetchAll возвращает массив, а fetchRow возвращает первый ROW. –

+0

Я получаю значения null Когда я пытаюсь получить некоторые значения столбца, особенно когда я пытаюсь получить «location_name». – Fortisimo

ответ

1

FetchRow() возвращает объект Zend_Db_Table_Row_Abstract. fetchAll() возвращает массив.

0

Метод Zend_Db_Table_Rowset_Abstract класс toArray, ведет себя по-разному, что не документировано. Если вы не повторяли строки перед вызовом, они не будут вести себя так, как ожидалось.

Таким образом, решение было бы непосредственно итерации подумала набор строк (может повторяться):

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

Надеется, что это помогает.

+0

Меня интересует это странное поведение. Что это? Я всегда использовал метод toArray и смог получить доступ ко всем полям из таблицы с помощью ключей массива как таковых: row ['id'] –

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 
       } 
      } 

     }