2010-09-21 12 views
0

J'ai un modèle avec des données que je veux utiliser pour remplir une section "Recent XYZ" sur la page d'accueil, qui est contrôlée par le contrôleur Pages.Pourquoi les données du modèle ne sont-elles pas correctement chargées dans le contrôleur de pages?

Dans le contrôleur Pages, j'ai le code suivant:

$this->loadModel('Model'); 
$this->set('datas', array($this->Model->find('all', array('limit' => 5)))); 

Puis, en Home.ctp, j'ai essayé d'accéder aux données via:

if(!empty($datas)) { foreach($datas as $data): 
echo $data['0']['Model']['field']; 
endforeach; } 

j'ai couru debug sur le find ('all') et il retourne un tableau, mais je ne vois rien de mal avec mon code. Et j'ai essayé d'utiliser find ('list') et de trouver ('first') et de changer le champ $ data ['0'] ['Model'] ['field'] en $ data ['Model'] [' '] lorsque cela est nécessaire en conséquence. Mais, il donne toujours une erreur Undefined Index pour Model.

Est-ce que quelqu'un sait pourquoi cela se produit?

+0

Votre code loadModel est-il dans la méthode d'index? –

+0

C'était à l'intérieur de la méthode display(). Je vais essayer de le déplacer dans la méthode index() et voir si cela fonctionne. – Justin

+0

Ok, maintenant il montre juste un espace vide .. pas sûr pourquoi .. – Justin

Répondre

0

Vous ne devriez pas mettre la clé numérotée si vous l'itérez avec une foreach. Ainsi,

echo $data['0']['Model']['field']; 

devrait être:

echo $data['Model']['field']; 

EDIT: Donc, pour clarifier les choses, si vous utilisez find('all'), et itérer sur le tableau retourné avec foreach, vous voulez $data['Model']['field']. Si vous n'étiez pas itératif, mais que vous vouliez juste le premier résultat, vous utiliseriez $data[0]['Model']['field']. Si vous utilisez find('first'), vous pouvez simplement utiliser $data['Model']['field'], et vous ne voudriez pas utiliser le foreach dans ce cas.

Donc, je suis un peu confus par le contexte de cela. Vous avez copié le contrôleur Pages dans le répertoire des contrôleurs et avez placé le code ci-dessus dans la méthode display()? Qu'obtenez-vous lorsque vous mettez pr($datas) dans home.ctp?

+0

Je l'ai essayé sans le [0] aussi avant sans succès. Quand je fais le pr ($ reviews), il montre le tableau initial, puis deux tableaux [0] avant le tableau ['model']. Bizarre? – Justin

+0

Aussi, j'ai un pages_controller.php dans le dossier controllers (n'est-ce pas là où il est censé être? Je n'utilise pas de générateur ...) et puis mettez le code ci-dessus dans la méthode display(), oui. – Justin

+0

Si vous obtenez les données souhaitées dans le tableau, la seule question est de savoir comment vous les itérez et imprimez les valeurs souhaitées. Il devrait être assez facile à comprendre - il suffit de référencer les clés réelles dans le tableau. Vous pouvez même mettre 'pr ($ data)' dans votre boucle foreach, et voir à quoi ressemble le tableau à ce moment-là. – bjudson