在模型中使用其他模型

时间:2014-03-28 03:36:45

标签: php yii yii-cactiverecord

对于细节(关于Yii),这将是一个普遍的问题,

我只是想知道这是不是一个好习惯,或者只是如果它是正确的:

在我的_form视图中,我调用的是另一个模型,而不是当前使用的模型;

// @model Clients
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'myid-form',
'enableAjaxValidation'=>false,
)); ?>

<div class="row">
  <?php echo $form->labelEx($model,'Debtor'); ?>
  <?php echo $form->dropDownList($model, 'Debtor'
        , CHtml::listData(Debtor::model()->findAll(), 'DebtorCode', 'DebtorDesc'),array('empty'=>'(Select Debtor)')); ?>
  <?php echo $form->error($model,'Debtor'); ?>
</div>

如果我错了,有人可以告诉我在成为习惯之前的正确方法是什么。

TIA

1 个答案:

答案 0 :(得分:1)

我认为你的问题不正确。您在询问是否在模型中调用另一个模型。但是您提供的代码,您在视图中使用的是另一个模型。显然,观点不是模型 也许你的问题是“我可以在视图中使用另一个模型,除了yii生成的代码,其中使用了其他一些模型” 回答您的问题:是的,如果您谈论使用模型,您可以这样使用它。 但是你在视图中编写了一个DB代码(findAll),这不是一个好习惯.Yii是一个MVC框架,其基本主题是分离表示和数据访问。是的,你可以做到这一点Yii不会反对,但它反对Yii哲学。其次,如果您在View中访问Db,那么您的代码就不再是“非常好的可管理代码”。它将是一个普通代码,因为在您的视图中使用Db访问权限,您或其他编码人员很难确定正在进行的操作以及如何在需要时修改代码。
您可以在控制器中编写该代码,如

$debtor=Debtor::model()->findAll();
$debtorList=CHtml::listData($debtor,'DebtorCode','DebtorCode');
$this->render('my _form',array('debtorList'=>$debtorList));

在您看来,您可以像使用

一样使用它
<?php echo $form->dropDownList($model, 'Debtor'
        , $debtorList,array('empty'=>'(Select Debtor)')); ?>