cakephp undefined index在明确定义时

时间:2012-01-23 17:51:32

标签: cakephp-2.0 cakephp-appmodel

供参考,请访问this page here。当试图在一个特定模型上显示视图时,我得到一个未定义的索引错误。具体来说,我的优惠券模型中的任何数据。这是我的控制器代码:

public function seafood() {

$this->paginate['Restaurant']=array(
        'limit'=>9,
        'order' => 'RAND()',
        'contain'=>array(
                'User'=>array(
                    'id', 'user_name'),

                'Coupon'=>array(
                    'id','description','expires','end_date','promo_code','restaurant_id')
                    ),
        'conditions'=>array(

                'Restaurant.active'=>1,
                'Restaurant.seafood'=>'Seafood'
                )   
    );
$data = $this->paginate('Restaurant');
$this->set('seafood', $data);

当我在我的视图中调试($ seafood)时,优惠券的所有数据都会显示,所以我知道它正确地提取数据并将其与我的餐厅模型相关联。但是,当我使用我的$ seafood数组创建一个foreach循环时,除了与优惠券相关的任何内容之外,我什么也得到了未定义的索引错误。奇怪的是,我还有我的控制器从用户模型拉出来,我在视图中从该模型调用的任何内容都会被渲染。这是我的观看代码:

 <?php foreach ($seafood as $res) { ?>
        .....irrelevant code.....
 <p><?php if($res['Coupon']['description'] !=''){
        echo $this->Text->truncate($res['Coupon']['description'], 200, array('ending'=>'...', 'exact'=>false) );
        }
        else echo 'Sorry, a description of this restaurant\'s promotion is not available.  <br><br><br>';
         ?><a href="<?php echo $res['Restaurant']['website']; ?>"><em> (read more -->)</em></a></p>
    <br />
    <div>
    <a href="<?php echo $res['Restaurant']['website']; ?>" id="specials"><span style="margin-left:36px;">Promo Code:&nbsp;&nbsp;<span style="font-style:bold; color:#FF0000;"><?php echo $res['User']['user_name']; ?></span></span></a>
    <a href=" " id="print"><span style="margin-left:24px;">Print</span></a>
<?php } ?>
   ......more irrelevant code.....

我已尝试从数组中删除可包含的行为,但结果是相同的。我应该指出,当调试阵列打印时,它按顺序排列:餐厅,用户,优惠券。蛋糕不知何故失去优惠券数组,因为它是第3?或者我的观看代码只是搞砸了?

1 个答案:

答案 0 :(得分:1)

看起来像餐厅有很多优惠券,所以优惠券是一个索引数组。你需要一个嵌套的for循环。

foreach ($seafood as $res) {
    //irrelevant
    foreach ($res['Coupon'] as $coupon) {
        if($coupon['description'] !=''){
            //do stuff
        }
    }
}