CakePHP 2.1.1 для каждого

На мой взгляд, я хочу, чтобы таблица HTML выглядела примерно так:

     COUNTRY         TOWN
      france         paris

Это мой запрос:

$foo=$this->country->find('all', array(
    'contain' => array(
            'Town' => array(
                'conditions' => array("Town.country_id = country.id"),
                'fields' => array('id','name')
            )
        )
    )
);

Я хочу отобразить на мой взгляд так:

 line6        <?php foreach ($diponibilite as $f): ?>
 line7  
 line8            <tr>
 line9                <td><?php echo $f['country']['name'];?></td>
 line10             <td><?php echo $f['town']['name'];?></td>
 line11         
 line12            </tr>
 line13        <?php endforeach; ?>

Модели «страна» и «город» связаны:

country hasmany town and town belongsto country

к сожалению, ошибка:

Примечание (8): Неопределенный индекс: имя [APP\View\index\index.ctp, строка 10]

Почему?


person John    schedule 26.04.2012    source источник
comment
Начнем с базовой отладки. Добавьте debug( $f ); в представление внутри цикла. У него есть ключ name?   -  person JJJ    schedule 27.04.2012
comment
привет Юхана! Спасибо за ваш комментарий. я сделал ваше предложение: добавление отладки ($ f) в представление внутри цикла, и это содержимое: 'массив ('страна' => массив ('id' => '1', 'имя' => 'франция' ), 'город' => массив( (int) 0 => массив( 'id' => '1', 'имя' => 'Париж', 'country_id' => '1' ), (int) 1 = › array( 'id' => '2', 'name' => 'marseille', 'country_id' => '1' ))' я получаю ту же ошибку. я думаю, что я не использую правильный синтаксис, чтобы найти значение в массиве с оператором foreach()???? Спасибо!   -  person John    schedule 27.04.2012


Ответы (1)


Проблема в том, что, поскольку у вас есть связь Country hasmany Town, в одной стране может быть несколько городов (как показывает вывод debug( $f )).

Чтобы напечатать все города, вам нужен еще один цикл:

<?php foreach( $diponibilite as $f ): ?>
    <tr>
        <td><?php echo $f[ 'country' ][ 'name' ]; ?></td>
        <td><?php 
            foreach( $f[ 'town' ] as $town ) {
                echo $town[ 'name' ].' ';
            }
        ?></td>
    </tr>
<?php endforeach; ?>

Или, если вам нужен только первый, используйте $f[ 'town' ][ 0 ][ 'name' ].

Примечание: если у вас правильно настроены ассоциации, вам не нужно условие в находке. Вы можете просто сделать

$foo = $this->country->find( 'all', array(
    'contain' => array(
            'Town.id',
            'Town.name'
        )
    )
);
person JJJ    schedule 27.04.2012
comment
Большое спасибо Юхана! следуя вашему предложению, моя ошибка исчезла! это мой код: ‹br/› <table> <tr> <td>country</td> <td>town</td> </tr> <?php foreach( $diponibilite as $f ): ?> ` ‹?php foreach( $f[ 'город' ] as $town ):?›` ` ‹tr›` ` ‹td›‹?php echo $f[ ' Имя страны' ]; ?›‹/td›` ` ‹td›‹?php echo $town[ 'name' ];?›‹/td›` ` ‹/tr›` <?php endforeach; ?> <?php endforeach; ?> </table> и в представлении отображается что-то вроде этого: страна город франция париж франция марсель еще раз спасибо Юхана! - person John; 27.04.2012