CakePHP trovare i dati relativi
-
27-10-2019 - |
Domanda
Il mio modello di galleria è legato al mio modello di immagine, ma quando ho retrive immagini dal galleries_controller non posso vedere alcun risultato e invece vedo questo errore:
Attenzione (2): Invalid argument in dotazione per foreach () [APP \ vista \ gallerie \ view.ctp, linea 35]
Ecco il codice della mia azione di controllo:
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);
}
Questo è il ciclo che ho nelle mie gallerie / vista per scorrere la matrice.
<?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; ?>
Soluzione
Non si insediano nulla con il set. La vostra scoperta è in esecuzione e quindi non viene memorizzato in una variabile. Inoltre, il ciclo di vista è scorrendo in modo non corretto.
Cambia il controller a:
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);
}
E il codice al fine di:
<?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; ?>
Detto questo, dal momento che tutto quello che vuoi fare è tirare in immagini associate quando una galleria è visto, si dovrebbe guardare in impostazione vostre associazioni modello e poi fare una scoperta sulla tua galleria che includerà le immagini che si desidera come così:
$this->set('gallery',$this->Gallery->find('first', array('conditions' => array('Gallery.id' => $id), 'recursive' => 1));
Se quanto sopra non funzionano, allora c'è qualcosa configurato male nei tuoi modelli. Si prega di inviare il vostro codice del modello in modo che possiamo indagare ulteriormente.