【问题标题】:Forms with related models具有相关模型的表格
【发布时间】:2011-06-25 19:00:01
【问题描述】:

我在使用 Yii 框架构建的网站时遇到问题。

在站点中,我有一个照片模型的表单。 Photos 模型与 Stores 模型相关,如下所示:

商店模型

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 条),这导致了一些问题。也许这是内存问题?

【问题讨论】:

  • 错误是什么?您是否在下拉功能之外尝试了Store::model()-&gt;findAll()
  • 没有错误 - 页面只显示 HTML,直到我有 Store::model()->findAll() 命令(甚至在下拉列表之外)。现在甚至显示了日志记录输出。 HTML 实际上只限于视图,就在命令之前。
  • 所以,是的,它可能会超时 - 是否打算在 HTML 下拉列表中显示所有 35k 商店?

标签: php yii yii-cmodel


【解决方案1】:

您是否在日志文件中发现任何错误?

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

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

【讨论】:

  • 抱歉,缺少的括号是错字,但存在于代码中。我没有看到创建任何日志文件,并且 YII_debug 设置为 true。任何日志文件都是在根目录中创建的,对吧?
  • 你能不能对 chtml::listData 做一个 print_r 看看是什么问题?
  • 另外请开启 Yii 的完整日志,在 protected/runtime/application.log 中什么都没有?
猜你喜欢
  • 2019-11-30
  • 2019-04-25
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多