【问题标题】:Related Active Record - Controller or Model method?相关的活动记录 - 控制器或模型方法?
【发布时间】:2011-03-07 21:44:43
【问题描述】:

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

场景是: - 车站“有一个”商店 - 一个 Store 'Belongs To' Station('store' 表有一个 'station_id' 列)

在车站的详细视图(车站/视图/1)中,我想检查这个特定车站是否有商店,如果有,我想从该商店返回 ID。

所以我的问题是:

1) 我是否创建一种方法来查找此信息并将其放入控制器或模型中?

2) 我应该向车站或商店询问此信息吗?

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

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

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

【问题讨论】:

    标签: php model-view-controller yii


    【解决方案1】:

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

    您应该向 Station 询问商店,因为您已经知道 Station 的 ID。

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

    【讨论】:

      【解决方案2】:

      是的,

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

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

      现在你可以访问数据库中的 store 对象,所以你可以这样做

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

      等等

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多