简体   繁体   中英

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

Tables

 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

I want to print Plan name against related Product, like that

View which i want

 alpha  |  delta   |  
  a          c
  b

but it showing me like,

alpha   |   bravo  |   charlie   |delta 
 a
 b      
 c

This is my controller code

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

this is my view code,

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

what is wrong in my view ?if some body help me , i'll be very thaksful to him. Thanks in advance.

Apparently I can't comment, but I'll try to answer as best I can. Since you don't mention p_plan in your view, and your don't show were $p is created it's kind of hard to tell what is actually going on.

The workflow: - Get the 3 tables - Sort them into an array of arrays of product_id => plan_id - track the product_ids to the column numbers - pass that array to the view - in the view print the array as row = column

Controller:

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

View:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM