如果有人可以解释为什么这个查询返回空值,我将不胜感激。 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;
}
}
}
答案 0 :(得分:1)
fetchRow()返回Zend_Db_Table_Row_Abstract的对象。 fetchAll()返回一个数组。
答案 1 :(得分:0)
Zend_Db_Table_Rowset_Abstract
类toArray
方法,以未记录的奇怪方式运行。如果在调用之前没有遍历行,则它将不会像预期的那样行为。
所以解决方案是直接迭代思考行集(可以迭代):
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
}
}
}