簡體   English   中英

如何根據相關ID打印數據?

[英]How to print the data against it's related id?

 Product        Plan            ProductPlan
 id |name       id |name        id  | product_id | plan_id     
 1    aplha      1   a          1        1          2             
 2    bravo      2   b          2        4          c   
 3    charlie    4   c   
 4    delta

我想針對相關產品打印計划名稱

查看我想要的

 alpha  |  delta   |  
  a          c
  b

但它顯示出我喜歡

alpha   |   bravo  |   charlie   |delta 
 a
 b      
 c

這是我的控制器代碼

    $p_plan = $this->ProductPlan->find('all',array(
                                    'conditions'=>array(
                                                'ProductPlan.product_id'=>'Product.product_id'
                                                )                       
                                        )
                                    );  
    $this->set('p_plan', $p_plan);  

這是我的查看代碼,

 <table>
<thead>
    <tr>
        <?php foreach ($p as $ps){?>
        <th>
                <?php echo __l($ps['Product']['name']);?>

        </th>
        <?php }?>
    </tr>   
</thead>    
    <tbody>
        <?php foreach ($p as $p1){
                    foreach($p1['Plan'] as $plan){
                        debug($plan);
        ?>
        <tr>
            <td>
                <?php echo __l($plan['name']);?>    
            </td>
        </tr>           
        <?php }
                    }?>

        </tbody>

我認為這是什么問題?如果有人幫助我,我將對他非常感激。 提前致謝。

顯然我無法發表評論,但我會盡力回答。 由於您在視圖中未提及p_plan,並且您未顯示$ p已創建,因此很難說出實際情況。

工作流程:-獲取3個表-將它們排序為product_id => plan_id的數組的數組-跟蹤product_ids的列號-將該數組傳遞給視圖-在視圖中將該數組打印為row = column

控制器:

//get just the productplan table
$p_plan = $this->ProductPlan->find('all',array(
    'conditions'=>array(
            'ProductPlan.product_id'=>'Product.product_id'
    ),'recursive' => -1
)); 

//get just the products table
$products = $this->Product->find('list',array(
    'fields' => array('id','name')
));

//get just the plans table
$plans = $this->Plan->find('list',array(
    'fields' => array('id','name')
));

//holder is a table to store counting variables
$holder = array(null);
//final_p_plan will be passed to the view.  Array of arrays sorted as product_id => plan_ids
$final_p_plan = array(null);
//p_plan_ids will be passed to the view.  Stores an array of used product id
$p_plan_ids = array(null);
//max_length is keeping track of how long the longest one is.  will be passed to view.  needed for the loop.
$max_length = 0;

//want to end up with an array we can just loop through and print off
foreach($p_plan as $p)
{
    //if it's empty set row 0 as product name, then row 1 as the active plan name.  else set the next row to the next plan name
    if(empty($holder[[$p['product_id']]]))
    {
        $holder[[$p['product_id']]]['i'] = 2;
        $final_p_plan[$p['product_id']][0] = $products[$p['product_id']];
        $final_p_plan[$p['product_id']][1] = $plans[$p['plan_id']];

        array_push($p_plan_ids,$p['product_id']);
    } else {
        $final_p_plan[$p['product_id']][$holder[[$p['product_id']]]['i']] = $plans[$p['plan_id']];
        $holder[[$p['product_id']]]['i'] = $holder[[$p['product_id']]]['i'] + 1;
        if($holder[[$p['product_id']]]['i'] > $max_length)
        {
            $max_length = $holder[[$p['product_id']]]['i'];
        }
    }
}

$this->set('final_p_plan', $final_p_plan);
$this->set('p_plan_ids', $p_plan_ids);
$this->set('max_length', $max_length);

視圖:

<table>
    <?php $i = 0; while($i < max_length): ?>
        <?php if($i == 0): ?>
            <thead>
                <tr>
                    <?php foreach($p_plan_ids as $id): ?>
                        <th>
                            <?php echo $final_p_plan[$id][$i]; ?>
                        </th>
                    <?php endforeach; ?>
                </tr>
            </thead>
            <tbody>
        <?php else: ?>
            <tr>
                <?php foreach($p_plan_ids as $id): ?>
                    <th>
                        <?php echo $final_p_plan[$id][$i]; ?>
                    </th>
                <?php endforeach; ?>
            </tr>
        <?php endif; $i++; ?>
    <?php endwhile; ?>
    </tbody>
</table>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM