CakePHP Найти похожие данные - PullRequest
0 голосов
/ 11 января 2012

Модель моей галереи связана с моей моделью изображения, но когда я получаю изображения из galleries_controller, я не вижу никакого результата и вместо этого вижу эту ошибку:

Предупреждение (2): указан неверный аргумент для foreach () [APP \ views \ galleries \ view.ctp, строка 35]

Вот код из моего действия контроллера:

    function view($id = null) {
            if (!$id) {
                $this->Session->setFlash(__('Invalid gallery', true));
                $this->redirect(array('action' => 'index'));
            }
            $this->set('gallery', $this->Gallery->read(null,$id));
 $this->Gallery->Image->find('all',array('conditions' => array('Image.gallery_id'=> $id)));
             $this->set('images', $images);

        }

Это цикл, который есть в моей галерее / представлении для перебора массива.

<?php

        $i = 0;
        foreach ($images['Image'] as $image):
            $class = null;
            if ($i++ % 2 == 0) {
                $class = ' class="altrow"';
            }
        ?>
        <tr<?php echo $class;?>>
            <td><?php $image['id'] ;?></td>
            <td><?php echo $image['name'];?></td>
            <!--<td><?php echo $image['img_file'];?></td>-->

            <td><?php  echo $html->image('uploads' . DS . 'images' . DS . $image['img_file'], array('alt' => 'Gallery Image')); ?></td>

        </tr>
    <?php endforeach; ?>

1 Ответ

2 голосов
/ 11 января 2012

Вы ничего не устанавливаете с помощью своего устройства. Ваша находка выполняется, а затем не сохраняется в переменной. Кроме того, ваш цикл просмотра неверно повторяется.

Измените свой контроллер на:

  function view($id = null) {
            if (!$id) {
                $this->Session->setFlash(__('Invalid gallery', true));
                $this->redirect(array('action' => 'index'));
            }
            $this->set('gallery', $this->Gallery->read(null,$id));
 $images = $this->Gallery->Image->find('all',array('conditions' => array('Image.gallery_id'=> $id)));
             $this->set('images', $images);
        }

И ваш код просмотра:

<?php

        $i = 0;
        foreach ($images as $image):
            $class = null;
            if ($i++ % 2 == 0) {
                $class = ' class="altrow"';
            }
        ?>
        <tr<?php echo $class;?>>
            <td><?php $image['Image']['id'] ;?></td>
            <td><?php echo $image['Image']['name'];?></td>
            <!--<td><?php echo $image['Image']['img_file'];?></td>-->

            <td><?php  echo $html->image('uploads' . DS . 'images' . DS . $image['Image']['img_file'], array('alt' => 'Gallery Image')); ?></td>

        </tr>
    <?php endforeach; ?>

При этом, поскольку все, что вы хотите сделать, это включить связанные изображения при просмотре галереи, вы должны изучить настройку ассоциаций моделей, а затем выполнить поиск в своей галерее, который будет включать в себя изображения, которые вам нравятся. так:

$this->set('gallery',$this->Gallery->find('first', array('conditions' => array('Gallery.id' => $id), 'recursive' => 1));

Если вышеперечисленное не работает, значит, в ваших моделях что-то неправильно настроено. Пожалуйста, опубликуйте код вашей модели, чтобы мы могли продолжить изучение.

...