2011-06-25 71 views
0

我正在使用Yii框架构建的网站面临问题。相关模型的形式

在该网站中,我为照片模型创建了一个表单。该照片模型是关系到房屋的模型,像这样:

商店模式

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

照片模式

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

在照片的形式,我想获得一个下拉与所有商店的清单像这样:

<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> 

发生什么事是页面渲染在dropdownList行中发生故障。如果我删除该行,表单显示正确。我有一种感觉,这可能是因为商店模型与照片模型的关系,但无法弄清楚为什么,或者如何解决这个问题。

有人可以发现可能发生的事情吗?谢谢!

编辑:

部分地找出它!

我暂时通过添加以下代码解决了该问题:

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

看来问题是,Store表有太多的纪录(超过35000),这是造成一些问题。也许这是一个记忆问题?

+1

有什么错误?你是否在下拉式函数外尝试了'Store :: model() - > findAll()'? – ldg

+0

没有错误 - 页面只显示HTML,直到我有Store :: model() - > findAll()命令(即使在下拉菜单之外)。现在显示日志记录输出。 HTML实际上仅限于视图,就在命令之前。 –

+0

所以,是的,它可能会超时 - 是否打算在HTML下拉菜单中显示所有35k商店? – ldg

回答

2

在日志文件中是否有错误?

如果上面的代码正好是你的,你可能只是缺少一个右括号...

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

对不起,缺少的括号是一个错字,但存在于代码中。我没有看到任何创建的日志文件,并且YII_debug设置为true。任何日志文件都在根目录下创建,对吧? –

+0

您可以再次执行print_r chtml :: listData来查看问题是什么? – Chux

+0

也请打开Yii的完整日志记录,在protected/runtime/application.log中没有任何内容? – schmunk