从MVC中的数据库中选择数据

时间:2017-11-21 19:16:27

标签: php model-view-controller yii2

我不明白从MVC框架中的数据库获取数据的最佳做法是什么。我见过两个场景:

  1. 在Controller类中执行数据库查询
  2. $feeds = Feedback::find()->orderBy('RAND()')->limit(4)->all();

    1. 在Model类中执行数据库查询,并从Controller类
    2. 调用此方法

      $categories = Category::getCategoriesList();

      正确的方法是什么?我应该在Controller类中执行哪些任务以及应该在Model类中执行哪些任务?

3 个答案:

答案 0 :(得分:0)

在模型中定义自定义查询方法。在适当时调用控制器中的那些模型方法以检索所需数据。 Yii2使用activerecord ORM设计模式;这意味着每个表通常都有一个表示表的模型类。

答案 1 :(得分:0)

如果你想直接用数据提供者(arrraydataprovider,activedataprovider等)获取数据,你可以使用First Method是最好的方法。如果你想获取数据并将数据返回到任何小部件,如(grideview,listview等)你可以使用第二种方法

答案 2 :(得分:-1)

有很多争论where to put your business logic in MVC

一般来说,在MVC architectures中,至少将数据库逻辑(模型)与Controller分开。

数据库特定查询在模型中完成。

Controller中的方法处理请求(解析路由)并创建正确的响应(视图或纯文本数据)。

示例

如果你有一个路由/网址/feedback,你的FeedbackController中会有一个'feedback()'方法。

class FeedbackController {

  use Feedback; 

  public function feedback(){
     return Feedback::list();
  }
}

在你的模型(反馈)中,你现在需要一个方法列表()。

class Feedback extends Model {

  public static function list(){
     return ( your_database_specific_query_which_returns_a_list_of_records );
  }

}