在Yii框架中,如何处理在单个视图中调用2个独立模型的情况?

时间:2013-10-03 02:20:34

标签: php yii yii-cmodel

我是一名Yii新手,正试图了解如何处理这种特殊情况。

如果我有2个型号,

第一个模型包含与模型有关的日期和其他信息。 第二个模型包含与第二个模型有关的日期和信息。

我希望在我输入日期时进行搜索 - 从那里拉出第一个和第二个模型的信息并显示给定日期。

在Yii中构建这个的正确方法是什么?

我是否只需向其中一个控制器添加动作?这似乎有点随意,因为除了日期之外,这两种模型都没有真正与另一种模型相连。

或者我只是创建一个没有相关模型的控制器?

我很感激您的反馈,因为我想了解Yii背后的想法。

我知道有一个博客示例,但在这种情况下,似乎“post”模型是“main”元素,并且“comments”将被拉出并显示给相关的“post”。但在我的情况下,我很好奇它是如何理想的结构,2个模型并没有真正具有那种依赖性,而是它们唯一的连接是日期。

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,正确定义表/模型中的关系。

您的控制器代码会稍微改变以处理两个模型。

$model1= new ModelOne;
$model2= new ModelTwo;

进行处理,加载模型数据/设置属性等。

将两个模型实例传递给视图。

$this->render('view',array(
    'model1'=>$model1,
    'model2'=>$model2,
    ));

在视图中,您可以定义从两个模型渲染数据的字段/网格等。您必须定义/指定哪些字段的关联。​​

答案 1 :(得分:0)

Yii是MVC模式。这意味着代码的一部分保留在M(模型)上,另一部分保留在V(视图)中,另一部分保留在(C)控制器中。您可以在protected / models中找到所有模型,在protected / views中查找所有视图等等。

控制器将使用模型渲染视图。模型是您发送给视图的所有数据。模型可以是变量,记录,整个结果集。在控制器中,您可以进行所需的所有查询,然后将结果放入视图中。

这很容易。

Or do I just create a controller with no related model?

任何控制器都有相关型号。也许你可能会混淆读取作为控制器的StuffController和作为模型的Stuff。这只意味着Stuff模型旨在使用stuff表。这也意味着控制器有许多与Stuff内容一起使用的动作。

所有适用于post的操作都可以在PostController中进行。所有适用于日历的操作都可以放在CalendarController中。但模型和控制器在逻辑上是分开的。

所以,......一个例子

class DogController extends Controller {
    public function actionBark() {
        $this->render('theView', array(
            'varName' => 333
        ));
    }
}

在Yii的MVC中,这意味着:   - 控制器:是DogController     - actionBark是一个关于狗的行动   - 型号:型号为'333'   - 视图:视图是protected / views / dog / theView.php文件,其中模型是$ varName,它等于333.模型是数据,不一定是扩展CActiveRecord或CModel的类的记录。 / p>