2

私の目的は、関連する子モデル(削除された後)のレコードをビューに表示することです。私の問題は、次のクエリを出力しようとすると、「通知(8):未定義のインデックス:」エラーメッセージが表示されることです。

トーナメントには多くのtournamentDetailsがあり、tournamentDetailsには多くの更新があります。トーナメントビューに表示される各トーナメント詳細のすべての更新を表示しようとしています。

だから私の質問は、エラーメッセージを適切に解決し、トーナメントビューページに各トーナメント詳細の更新を表示する方法です。

'トーナメント'コントローラービューアクションでの私の検索データは次のとおりです。

$updates = $this->Tournament->TournamentDetail->Update->find('all', array( 'tournament_details.tournament_id'=> $this->data['Tournament']['id']));

ビューでは、私はこのコードを持っています。

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

これは、私が他の関連する子レコードに問題なく使用しているのと同じ「foreach」コードです。debug()関数を使用して調査しましたが、何が欠けているのかわかりませんでした。

デバッグ関数からの$updates配列の出力は、次のようになります。

Array
(
    [0] => Array
        (
            [Update] => 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
            )

これほど深いレコードを表示する特別な方法はありますか?

いつものように、よろしくお願いします。ポール


更新:2011年2月23日 いくつかのテストの後、私が抱えていると思われる問題は、正しい値を見つけて$updates変数に渡すことです。

要約すると、$updates変数に現在の「tournament_details_id」を保持させたいと思います。これにより、関連する更新レコードが「トーナメント」ビューに表示されます。

私はまだ初心者であり、明らかなことを見落としている可能性があります。

モデル情報は次のとおりです。

class Tournament extends AppModel {
 var $name = 'Tournament';
 var $hasMany = array(
    'TournamentDetail' => array(
    'className' => 'TournamentDetail',
'foreignKey' => 'tournament_id',)


class TournamentDetail extends AppModel {
var $name = 'TournamentDetail';
var $belongsTo = array(
    'Tournament' => array(
        'className' => 'Tournament',
        'foreignKey' => 'tournament_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

class Update extends AppModel {

var $name = 'Update';
var $belongsTo = array(
         'TournamentDetails' => array(
        'className' => 'TournamentDetails',
        'foreignKey' => 'tournament_detail_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

コントローラーデータ:

class TournamentsController extends AppController 

function view($slug = null) {
    if (!$slug) {
        $this->Session->setFlash(__('Invalid Tournament.', true));
        $this->redirect(array('action'=>'index'));
    }
    $this->Tournament->recursive = 1;
    $tournament = $this->Tournament->findBySlug($slug);
    $updates = $this->Tournament->TournamentDetail->Update->find('all', array('conditions' => array( 'tournament_details_id' => $this->data['TournamentDetails']['id'] )));

$this->set(compact('tournament','updates', $updates ));

トーナメントビュー。これは、「トーナメントの詳細」および(理想的には)関連するトーナメントの詳細「更新」を表示します。

<h2><?php echo $tournament['Tournament']['name']; ?></h2>

<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
 <h1><?php echo $tournamentDetail ['title']; ?></h1>
 <p><?php echo $tournamentDetail ['body']; ?></p>
<?php endforeach; ?>

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

トーナメントの詳細「id」を整数として追加することでこれをテストしました。正しい「update」レコードが表示されます。ただし、同じように検索操作を構成する際に問題があるようです。

いつものように私は助けに感謝します。

ありがとうポール

4

2 に答える 2

1

デバッグ出力に基づくと、 $tournaments 変数は (連想配列ではなく) 配列で構成されているように見えるため、 を使用しforeachてこれらの各要素にアクセスすることをお勧めします。

foreach ($tournaments as $update):
?>
    <h3>Updates</h3>
    <h1><?php echo $update ['Update']['title']; ?></h1>
    <p><?php echo $update ['Update']['body']; ?></p>
    <hr/>
<?php endforeach; ?>
于 2011-02-21T04:38:03.947 に答える
0

間違った変数を使用しているようです。変数について話しますが、ビューで変数$updatesを使用してい$tournamentます。

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

さらに、その検索を含むコントローラーメソッド全体を投稿していませんが、データをビューにまだ送信していない可能性があります

$this->set(compact('updates'));
于 2011-02-21T04:03:55.380 に答える