2016-10-11 9 views
0

で多次元配列を作成し、私は2番目のページに移動したときにのみ、最初のページで動作しますが、DBからユーザを取得し、表の行にCodeIgniterのコントローラ

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(); 

    $this->pagination->initialize($config); 

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

View: 
<table> 
    <tr> 
     <th> 
     <?php echo 'user';?> 
     </th> 
     <th> 
     <?php echo 'email';?> 
     </th>    
     <th> 
     <?php echo 'device id';?> 
     </th> 
    </tr> 
    <?php 
    foreach($users as $val){ 
    ?> 
    <tr> 
     <td> 
     <?=$val->user_id?> 
     </td> 
     <td> 
     <?php echo $val->email;?> 
     </td> 
     <td> 
     <?php echo $val->device_id;?> 
     </td> 
    </tr> 
    <?php 
    $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>';     
    } 
} 
?> 
</table> 
<ul class="pagination"><?php if($pagination) echo $pagination;?></ul> 

user id user name  user email 
1   Mike    [email protected] 
order:10 order total:50 order date: 2016-09-12 
order:12 order total:100 order date: 2016-09-14 
2   Tom    [email protected] 
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  

をすべてのユーザを表示するコントローラを備えていコントローラーのURLが他のページ番号のインデックスに変わります。私はデータオーダーなしでユーザーの行を取得しますが、テーブルの上にprint_rオーダーがある場合は

答えて

1
$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; 

次にビューで、あなたはこのようなforeachループ内で、各ユーザーの注文にアクセスすることができます。

$受注[する$ user->のuser_id]

、それはまた、配列であるとして、あなたはループを実行する必要が各ユーザーの注文行を作成します。

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

希望すると、これが役に立ちます。

+0

は、ページ2を使用してページ2に移動したときにのみ、最初のページでうまく動作しますが、注文を取らずにユーザーの行を取得します。テーブルの前にprint_r($ orders)を置くと、2番目のページに正しい注文者が表示されますが、各ユーザーの注文行は印刷されません。 URLがインデックスに変わる/ 2理由がわからない –

+0

他のページで注文を印刷せず、最初のページに印刷した理由が分かりません –

+0

私にもその理由がわかりません。それでも問題が解決しない場合は、正確なコードを共有することができます。 –

関連する問題