相关的活动记录 - 控制器或模型方法?

时间:2011-03-07 21:44:43

标签: php model-view-controller yii

我正在尝试从视图中访问Yii中的相关模型信息,并且需要创建一个方法。我不确定该方法是应该进入控制器还是模型...

情景是:   - 车站'有一个'商店   - 商店'属于'站('商店'表有'station_id'列)

在Station(station / view / 1)的详细视图中,我想查看这个特定Station有一个Store的天气,如果是,我想从该商店返回ID。

所以我的问题是:

1)我是否创建了一种方法来查找此信息并将其放入Controller或Model?

2)我应该向电台询问此信息还是商店?

3)我知道Controller是模型和视图之间的粘合剂,因此将此方法放在控制器中是有意义的。但是,在Yii中,通常的做法是在视图文件中包含以下内容:

CHtml::listData(Company::model()->findAll()

在我看来,视图直接与模型进行交互

2 个答案:

答案 0 :(得分:1)

如果使用Active Record,您可以在模型中设置关系函数中Station和Store模型之间的关系。然后可以使用一行短代码获得商店的ID(类似于$ storeId = $ model-> store-> id;)。因此,您可以轻松地将此代码放入控制器中,并使控制器保持精简状态(精益控制器,胖模型)。

您应该“询问”电台的电台,因为您已经知道电台的ID。

如果视图和模型之间不需要额外的逻辑,则可以跳过控制器。但不要忘记授权等事情。

答案 1 :(得分:0)

是的,

由于您使用的是活动记录关系,所以您只需要做

$station = Station::model()->findAll();

$station->store 

现在您可以访问数据库中的商店对象,因此您可以

$station->store->id
$station->store->name

等等。

是的,Yii很棒:)但这只是ActiveRecord:)

通常的做法是直接从视图与控制器进行通信而不是模型。控制器处理验证并在模型正确后将其传递给模型。