1

関連するレコードをビュー アクションにプルするためにコンテナブルを使用していますが、結果をループするときにエラー メッセージが表示されます。

また、「sluggable」動作を使用しているため、検索操作にはこの変数で検索する条件があります。

ビューで検索変数をデバッグすると、正しいレコードが表示されます。しかし、ビューでそれらをループしようとすると、「通知 (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 ループがネストされておらず、関連付けの最初のレベルでのみループしていたことです。forearch ループは、多くの「tournamentDetails」を持つ「トーナメント」を処理します。

ループは、多くの「更新」がある「tournamentDetails」まで 1 レベル深くする必要がありました。

ビューでこれを解決したコードを次に示します。

<?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、コントローラーからビューまでちゃんとありますか?ビューはそれを正しく扱いますか。

あなたは素晴らしい考えを持っています。これは私が先週行ったことですが、そうすべきだと確信しています。現在コントローラーから変数を使用しているすべてのビュー コードを消去し、データフローを念頭に置いて上記の手順を実行します (ただし、これに 1 時間以上費やさないでください)。

うまくいかない場合:

何かがだまされています。あなたが絶望の中でもう一週間過ごす前に、私は

  1. 収容可能な動作なしで試して、動作するかどうかを確認してください
  2. 完全に新しいCakePHP環境(あなたの場合は1.2.5)でまったく
    同じシナリオを設定してみてください。それが機能するかどうかを確認してください

目標を達成した場合は、元の何がうまくいかなかったのかを確認してください (多くの場合、平手打ちの瞬間)。

そうでない場合:

  1. 既知のバグがあるかどうかを確認してください
  2. アップグレードを検討してください (または、最初に 1.3.7 で目標を達成してみてください)

がんばれ、ベンジャミン

于 2011-03-01T13:03:51.867 に答える
0

解像度

ご入力いただきありがとうございます。少し前に戻った後、「未定義のインデックス」で何が起こっているのか、ループする方法についてコメントしました。

問題は、foreachループがネストされておらず、最初のレベルの関連付けでのみループすることでした。フォアアーチループは、多くの「tournamentDetails」を持つ「トーナメント」を処理します。

ループは、多くの「更新」がある「tournamentDetails」に1レベル深く進む必要がありました。

ビューでこれを解決したコードは次のとおりです。

<?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 に答える
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

RSK の答えは正しいはずなので、まだ機能していないため、必要な情報がすべて提供されていない可能性があります。この出力は何ですか: debug($tournament);?

于 2011-03-01T10:54:27.820 に答える
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 に答える