表
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>
我的观点有什么不妥?如果有人帮助我,我会非常厌烦他。提前谢谢。
答案 0 :(得分:1)
显然我无法发表评论,但我会尽力回答。由于你没有在你的视图中提到p_plan,并且你没有显示是否创建了$ p,所以很难分辨出实际发生的情况。
工作流程: - 获得3张桌子 - 将它们分类为product_id =&gt;数组的数组。 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>