一、术语解读
模型是 MVC 模式中的一部分, 是代表业务数据、规则和逻辑的对象,通过模型,我们可以建立与数据库的连接,读取数据以及更新数据等。为了
更好的配合数据库工作,系统由此引入了一个更加简单强大的活动记录(Active Record)类来完成该任务。
Active Record 提供了一个面向对象的接口, 用以访问和操作数据库中的数据。Active Record 类与数据库表关联, Active Record 实例对应于该表的一行, Active Record 实例的属性表示该行中特定列的值。 您可以访问 Active Record 属性并调用 Active Record 方法来访问和操作存储在数据库表中的数据, 而不用编写原始 SQL 语句。
二、模型路径
对一个项目来讲,一般都会有几个应用(站点),比如前台(frontend)、后台(backend)、H5/WAP等,但每一个应用(站点)都会公用数据库连接,而我们的模型就是负责与数据库的连接工作
,所以通常情况下,我们的模型文件会部署在公共文件夹@shopwind/common/models下,该目录下的每一个模型文件与数据表一一对应,如@shopwind/common/models/ArticleModel.php
就对应数据库的article表。
应用(站点)目录下也会有一个models文件夹,我们无需在该目录下编写有数据表一一对应的模型文件了,直接调用common/models即可。对于前台应用(站点)下的models模型文件@shopwind/frontend/models,我们可以编写该应用下相关模型的业务逻辑,比如插入商品操作,前台(frontend)应用需要插入商品介绍字段,而H5端可能不需要,那么我们可以分别在各自模型中编写
插入(insert)方法,以实现业务逻辑的互不干扰。
可以在前台应用中,定义一个继承common\models\ArticleModel的模型类frontend\models\ArticleModel,在后台应用中定义backend\models\ArticleModel通过这种策略,你清楚 frontend\models\ArticleModel 只对应前台应用,如果你修改它, 就无需担忧修改会影响后台应用。
三、代码解读
我们以文章模型为例,文件路径为@shopwind/common/models/ArticleModel.php,如下代码:
namespace common\models;
use Yii;
use yii\db\ActiveRecord;
class ArticleModel extends ActiveRecord
{
public static function tableName()
{
return '{{%article}}';
}
}
模型类名首字母必须大写,并且连接保留字Model,继承父类 yii\db\ActiveRecord,然后编写一个静态方法tableName(),返回数据表名,注意数据表名不用加表前缀,系统在组装SQL语句时会自动给我们加上。通过这几行代码,就实现了一个与数据表对应的模型,有了这个模型,我们就可以干很多不可思议的事情!
四、如何使用
建立好模型之后,我们可以在控制器中方法中(或者其他地方),通过以下方式来获得取模型对象,以下是控制器中引入模型的例子,其实关键代码就是use common\models\ArticleModel和$model = new ArticleModel(),或者可以在任何地方仅仅使用一行代码就能获取到模型对象$model = new \common\models\ArticleModel()
namespace frontend\controllers;
use Yii;
use common\models\ArticleModel;
class ArticleController extends \common\controllers\BaseMallController
{
public function actionIndex()
{
$model = new ArticleModel();
// $result = $model->find()->asArray()->all();
}
}
模型类给我们封装好了查询(find)、更新(update)、删除(delete),新增(save)等操作,用起来非常的方便。有关CURD操作的更多内容我们将在下一章节介绍。
注意:建立模型文件之前应该先建好对应的数据表,比如ArticleModel模型对应的article表,可以手工创建表,也可以通过其他方式创建。
更多问题,可以访问我们的
开发者社区反馈,我们会有官方技术人员在线解答。