2016-10-11 10:06
浏览 48


I'm having a controller to get users from DB and display every user in a table row

Controller: [update] //only first page displays data correctly but pager +1 using 
pagination displays user data only not getting orders as first page
when I print_r($orders) in all pages I get correct orders but in the table the inner 
foreach doesn't work

public function index($page_id = 1)
    $perPage = 25;
    $offset = ($page_id - 1) * $perPage;

    if ($offset < 0) {
        $offset = $perPage;
    $lang_id = $this->data['active_language']->id;
    $config['base_url'] = base_url() . "reports/myController/index/";
    $config['per_page'] = $perPage;
    $config['first_link'] = FALSE;
    $config['last_link'] = FALSE;
    $config['uri_segment'] = 4;
    $config['use_page_numbers'] = TRUE;
    $config['first_link'] = lang('first_page');
    $config['last_link'] = lang('last_page');
    $config['first_tag_open'] = '<li>';
    $config['first_tag_close'] = '</li>';
    $config['last_tag_open'] = '<li>';
    $config['last_tag_close'] = '</li>';
    $config['next_tag_open'] = '<li>';
    $config['next_tag_close'] = '</li>';
    $config['prev_tag_open'] = '<li>';
    $config['prev_tag_close'] = '</li>';
    $config['num_tag_open'] = '<li>';
    $config['num_tag_close'] = '</li>';
    $config['cur_tag_open'] = '<li><strong>';
    $config['cur_tag_close'] = '</strong></li>';

    $config['display_pages'] = TRUE;

    $orders_serials_ids = $this->myModel->get_orders_serials_ids();

    $config['total_rows'] = $this->myModel->count_orders();


    $users = $this->myModel->users_merchants($perPage, $offset);
    $this->data['users'] = $users;

    $user_orders = array();
    foreach ($users as $user){
        $user_orders[$user->user_id] = $this->myModel->get_orders($user->user_id);

        <?php echo 'user';?>
        <?php echo 'email';?>
        <?php echo 'device id';?>
    foreach($users as $val){
        <?php echo $val->email;?>
        <?php echo $val->device_id;?>
    $order = array(); //empty the variable before each loop
    foreach($orders[$user->user_id] as $order){
        echo '<tr><td colspan="4">'. date('Y-m',$order->unix_time).
' -> '.round($order->amount2,2).'</td></tr>';                   
<ul class="pagination"><?php if($pagination) echo $pagination;?></ul>

user id    user name        user email
1          Mike   
order:10   order total:50   order date: 2016-09-12
order:12   order total:100  order date: 2016-09-14
2          Tom    
order:15   order total:80   order date: 2016-09-13
order:16   order total:120  order date: 2016-09-14
order:17   order total:140  order date: 2016-10-10      

This works in the first page only but when I navigate to second page the controller url changes to index/2 r any other page number I get users rows without data orders though if I print_r orders above the table I get correct orders

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • dongnanbi4942 2016-10-11 12:40

    you can reduce the code a little but in controller like this:

    $this->data['users'] = $users; // correct data no problem here
    $user_orders = array();
    foreach ($users as $user){
       $user_orders[$user->user_id] = $this->myMmodel>get_orders($user->user_id); //make user_id as key so that you can access easily for each user 
    $this->data['orders'] = $user_orders;

    Then in view, you can access orders of each user inside the foreach loop like this:


    as it is also an array, you have to run loop to create order rows for each user:

    $order = array(); //empty the variable before each loop
    foreach($orders[$user->user_id] as $order){
       echo '<tr><td>'.$order->id.'</td>'.....//more columns like this

    Hope this would help!

    解决 无用
    打赏 举报

相关推荐 更多相似问题