2011-06-25 4 views
0

Je suis confronté à un problème avec un site que je construis en utilisant le framework Yii.Formulaires avec des modèles apparentés

Dans le site j'ai un formulaire pour le modèle Photos. Le modèle de photos est liée au modèle des magasins comme si:

Magasins Modèle

public function relations() 
{ 
return array(
'photos' => array(self::HAS_MANY, 'Photo', 'storeId'), 
... 

Photos Modèle

public function relations() 
{ 
return array(
'store' => array(self::BELONGS_TO, 'Store', 'storeId'), 
); 
} 

Dans la forme de photos, je suis en train d'obtenir un menu déroulant avec la liste de tous les magasins comme tels:

<div class="row"> 
<?php echo $form->labelEx($model,'storeId'); ?> 
<?php 
//The below line is causing the problem 
echo $form->dropDownList($model,'storeId', 
CHtml::listData(Store::model()->findAll(), 'id', 'name')); 
?> 
<?php echo $form->error($model,'storeId'); ?> 
</div> 

Qu'est-ce qui se passe est que le rendu de la page se décompose à la ligne dropdownList. Si je supprime la ligne, le formulaire s'affiche correctement. J'ai le sentiment que cela pourrait être dû à la relation du modèle de magasin avec le modèle photo, mais je n'arrive pas à comprendre pourquoi ou comment résoudre ce problème.

Quelqu'un peut-il nous éclairer sur ce qui pourrait se passer? Merci!

Édition:

Compris en partie!

Je fixe temporairement le problème en ajoutant le code suivant:

$criteria = new CDbCriteria(); 
$criteria->limit = 10; 
$stores = Store::model()->findAll($criteria); 

Il semble que le problème est que la table de magasin a trop de dossiers (plus de 35000), ce qui est à l'origine des problèmes. Peut-être que c'est un problème de mémoire?

+1

ce qui est l'erreur? avez-vous essayé 'Store :: model() -> findAll()' en dehors de la fonction déroulante? – ldg

+0

Il n'y a pas d'erreur - la page montre seulement le HTML jusqu'au point où j'ai la commande Store :: model() -> findAll() (même en dehors de la liste déroulante). Même la sortie de journalisation est maintenant affichée. Le HTML est littéralement juste limité à la vue, juste avant la commande. –

+0

alors, oui, il pourrait être temps de sortir - est l'intention de montrer tous les magasins 35k dans une liste déroulante HTML? – ldg

Répondre

2

Avez-vous des erreurs dans les fichiers journaux?

Si le code ci-dessus est exactement la vôtre, vous pouvez simplement être en manque un crochet de fermeture ...

<?php 
//The below line is causing the problem 
echo $form->dropDownList(
    $model, 
    'storeId', 
    CHtml::listData(Store::model()->findAll(), 'id', 'name') 
); 
?> 
+0

Désolé, le crochet manquant était une faute de frappe mais est présent dans le code. Je ne vois aucun fichier journal créé et YII_debug est défini sur true. Tous les fichiers journaux sont créés dans le répertoire racine, n'est-ce pas? –

+0

Pouvez-vous faire un print_r contre le chtml :: listData pour voir quel est le problème? – Chux

+0

Et aussi s'il vous plaît activer la journalisation complète de Yii, rien dans protected/runtime/application.log? – schmunk

Questions connexes