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