2014-07-01 53 views
2

即使表中有多个条目与user_is 2,下面的查询只返回一个结果。我不知道我做错了什么。无法从表中返回数据 - Codeigniter

function get_payments($user_id) 
{ 
$sql = "SELECT txn_id, payer_email FROM orders WHERE user_id = ?"; 
$query = $this->db->query($sql, $user_id); 

//echo $this->db->last_query(); 

if($query->num_rows() != 0) { 
    foreach($query->result() as $payment) 
    { 
    $data[] = $payment; 
    return $data; 
    } 
}else{ 
    return false; 
} 

} 

这就是$ this-> db-> last_query();回报。 SELECT txn_id, payer_email FROM orders WHERE user_id = '2'

控制器:

$profile_data['user_payments'] = $this->profile_model->get_payments($user_id);  

查看:

<?php 
//var_dump($user_payments); 
    foreach($user_payments as $payment) 
    { 
    echo '<p>'; 
    echo $payment->txn_id; 
    echo $payment->payer_email; 
    echo '</p>'; 
    } 
?> 

回答

0

这里存在

foreach($query->result() as $payment) 
    { 
    $data[] = $payment; 
    return $data; // this line returns the data and it stops execution in first loop itself 
    } 

稍有不慎就应该像

if($query->num_rows() != 0) { 
    foreach($query->result() as $payment) 
     { 
     $data[] = $payment; 
     } 
    return $data; 
} 
-1

在foreach循环完成后,您应该从模型中返回$data

if($query->num_rows() != 0) { 
    foreach($query->result() as $payment) 
    { 
     $data[] = $payment; 
    } 
    return $data; 
    } 
    else 
    { 
    return false; 
    } 
-1

简单CI方式:

... 
$query = $this->db->query($sql, $user_id); 
return $query->result_array(); 

没有循环需要,什么都没有。

而且我看到你正在使用的对象形式,在这种情况下做到这一点:

return $query->result(); 

然后只要循环使用在你看来好像你已经在做。


所以这是整个模型的方法:

function get_payments($user_id) { 
    $sql = "SELECT txn_id, payer_email FROM orders WHERE user_id = ?"; 
    $query = $this->db->query($sql, $user_id); 
    return $query->result(); 
} 

请参阅相关的文档在这里:http://ellislab.com/codeigniter/user-guide/database/results.html


并采用活动记录(最 “自然” 到CI):

function get_payments($user_id) { 
    return $this->db 
     ->select('txn_id, payer_email') 
     ->where('user_id', $user_id) 
     ->get('orders') 
     ->result(); 
} 
+0

'如果没有行,它返回false'。不是真的,它会生成'空数组'。 –

+0

因为'array()!= false'也许我太苛刻了,但是这行'它在没有行的情况下返回false'是误导性的,并且不适合像你这样的知名成员。对不起;) –

1

试试这个:

<?php 
function get_payments($user_id){ 
    $this->db->select('txn_id, payer_email') 
     ->from('orders') 
     ->where('user_id', $user_id); 
    $qry = $this->db->get(); 
    $res = $qry->result(); 
    if($res){ 
     return $res; 
    }else{ 
     return false; 
    } 

} 
?>