1

我正在使用可包含将关联的记录拉入视图操作,并在遍历结果时收到错误消息。

另外,我使用的是“sluggable”行为,所以查找操作有一个条件来搜索这个变量。

当我在视图中调试 find 变量时,我确实看到了正确的记录。但是当我尝试在视图中遍历它们时,我得到了“通知(8):未定义的索引:错误。” 理想情况下,我喜欢了解如何解决此错误,因为它偶尔会发生。

模型设置为:

比赛有很多比赛详情

比赛详情有很多更新

我要显示的记录是:

锦标赛->锦标赛详情->更新

锦标赛控制器如下所示:

    $tournament = $this->Tournament->find('first', array(
         'conditions' => array( 'slug' => $slug),
         'contain' => array(
        'TournamentDetail' => array(
             'Update' => array('order' => 'Update.id DESC'),
        ))));

锦标赛视图操作如下所示:

<?php foreach ($tournament ['Update'] as $update): ?>
   <h3>Update: <?php echo $update ['Update']['date']; ?></h3>
     <h4><?php echo $update['Update']['title']; ?></h4>
     <p><?php echo $update  ['Update']['body']; ?></p>
   <hr/>
<?php endforeach; ?>

调试时视图中的“更新”数据如下所示:

[Update] => Array
                    (
                        [0] => Array
                            (
                                [id] => 2
                                [title] => Indoor Challenge
                                [date] => 2010-03-19
                                [body] => Congratulations 2010 Champion 
                                [tournament_detail_id] => 4
                                [homeStatus] => no
                            )

                        [1] => Array
                            (
                                [id] => 1
                                [title] => first round matches start today 
                                [date] => 2010-03-19
                                [body] => this tournament's first round matches start today. 
                                [tournament_detail_id] => 4
                                [homeStatus] => no
                            )

循环浏览“更新”时,我是否忽略了一些非常明显的东西?

谢谢,保罗

解析度

感谢大家的投入。退后几步后,我突然想到“未定义的索引”发生了什么以及有关如何循环的评论。

问题是 foreach 循环没有嵌套,它只在第一级关联上循环。foreach 循环处理具有许多“锦标赛详细信息”的“锦标赛”。

循环需要更深一层到具有许多“更新”的“锦标赛详细信息”。

这是在视图中解决此问题的代码。

<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
  <?php foreach ($tournamentDetail ['Update'] as $update): ?>
    <h3>Update: <?php echo $update['date']; ?></h3>
      <h4><?php echo $update['title']; ?></h4>
      <p><?php echo $update['body']; ?></p>
    <hr/>
  <?php endforeach; ?>
<?php endforeach; ?>

如果其他人希望了解如何使用具有多个关联级别的可包含行为,请记住,您可能必须在视图中嵌套 foreach 循环才能显示您所追求的结果。

干杯,保罗

4

5 回答 5

1

保罗,

鉴于其他事情是正确的,您是否混合了单数,复数,大写和小写?特别是各种组合的更新/更新。

编辑 0: 快速拍摄?:根本没有定义这样的索引,请注意您正在使用由数组组成的数组。看来您必须使用嵌套在第一个循环中的另一个循环。

编辑 1: 不幸的是,我只能提供非常通用的帮助,因为我不坐在您的代码前面。从您的帖子和评论中,我猜想某些变量名称混淆了。只需检查整个数据流通常就可以了。控制器中提供正确数据的确切变量名称是什么?如果有,set从控制器到视图是否正确?视图是否正确解决了它。

你的想法很好,这是我上周所做的,但我很确定应该这样做。清除当前使用来自控制器的任何变量的所有视图代码,按照上述说明继续操作,牢记数据流(但不要在此花费超过一小时)。

如果它不起作用:

有什么东西是foobared。在你又绝望地度过一个星期之前,我会

  1. 在没有可包含行为的情况下尝试它,看看它是否有效

  2. 尝试在全新的CakePHP 环境(在您的情况下为 1.2.5)中设置完全相同的场景
    ,看看它是否有效

如果您实现了目标,请尝试查看原版中出了什么问题(通常是打脸的时刻)。

如果不:

  1. 尝试查看是否存在已知错误
  2. 考虑升级(或首先尝试在 1.3.7 中实现您的目标)

祝你好运,本杰明

于 2011-03-01T13:03:51.867 回答
0

我想我理解你的问题,请尝试以这种方式循环

<?php foreach ($tournament ['Update'] as $update): ?>
   <h3>Update: <?php echo $update['date']; ?></h3>
     <h4><?php echo $update['title']; ?></h4>
     <p><?php echo $update['body']; ?></p>
   <hr/>
<?php endforeach; ?>
于 2011-02-28T18:50:11.173 回答
0

RSK 的回答应该是正确的,因此由于它仍然无法正常工作,您可能没有提供所有需要的信息。这个输出是什么: debug($tournament);

于 2011-03-01T10:54:27.820 回答
0

这一切都假设您的调试信息是 debug( $tournament ) 而不是 debug( $update )

/* your old code */
<?php foreach ($tournament ['Update'] as $update): ?>
    <h3>Update: <?php echo $update ['Update']['date']; ?></h3>
    <h4><?php echo $update['Update']['title']; ?></h4>
    <p><?php echo $update  ['Update']['body']; ?></p>
    <hr/>
<?php endforeach; ?>

如果您提供的调试值是 $tournament 变量的调试,那么循环的第一部分只是将锦标赛变量内的数字键数组分配给 $update 值。

因此,当您通过循环发送 $tournament[ 'Update' ] 时,您将在 $update 数组中获得一个结构,如下所示。

array(
    [id] => 2
    [title] => Indoor Challenge
    [date] => 2010-03-19
    [body] => Congratulations 2010 Champion 
    [tournament_detail_id] => 4
    [homeStatus] => no
)

但是在您的循环中,您尝试访问键控值,就好像它们存在于以“更新”键控的附加层下一样。该键在您的内部数组中不存在。

所以如果我的假设是正确的 - 你的循环应该是这样的:

/* your old code with edits removing the additional interior Update key */
<?php foreach ($tournament ['Update'] as $update): ?>
    <h3>Update: <?php echo $update['date']; ?></h3>
    <h4><?php echo $update['title']; ?></h4>
    <p><?php echo $update['body']; ?></p>
    <hr/>
<?php endforeach; ?>

原始代码中的括号中似乎也有一些空格 - 我不知道这是否是一个问题,但它对我来说看起来很奇怪。

于 2011-03-03T19:07:03.690 回答
0

解析度

感谢大家的投入。退后几步后,我突然想到“未定义的索引”发生了什么以及有关如何循环的评论。

问题是 foreach 循环没有嵌套,它只在第一级关联上循环。foreach 循环处理具有许多“锦标赛详细信息”的“锦标赛”。

循环需要更深一层到具有许多“更新”的“锦标赛详细信息”。

这是在视图中解决此问题的代码。

<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
  <?php foreach ($tournamentDetail ['Update'] as $update): ?>
    <h3>Update: <?php echo $update['date']; ?></h3>
      <h4><?php echo $update['title']; ?></h4>
      <p><?php echo $update['body']; ?></p>
    <hr/>
  <?php endforeach; ?>
<?php endforeach; ?>

如果其他人希望了解如何使用具有多个关联级别的可包含行为,请记住,您可能必须在视图中嵌套 foreach 循环才能显示您所追求的结果。

干杯,保罗

于 2011-03-04T00:39:18.743 回答