Skip to content

模型层

模型层介绍

模型层主要是和数据库的表进行映射,一般一个模型对应一个数据表。详细参考 ThinkOrm

php
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: your name
// +----------------------------------------------------------------------
namespace app\cms\model\news;

use plugin\saiadmin\basic\BaseModel;

/**
 * 文章管理模型
 */
class Article extends BaseModel
{
    /**
     * 数据表主键
     * @var string
     */
    protected $pk = 'id';

    /**
     * 数据库表名称
     * @var string
     */
    protected $table = 'eb_article';

    /**
     * 文章标题 搜索
     */
    public function searchTitleAttr($query, $value)
    {
        $query->where('title', 'like', '%'.$value.'%');
    }

    /**
     * 关联模型category
     */
    public function category()
    {
        return $this->belongsTo(ArticleCategory::class, 'category_id', 'id');
    }
}

注意

我们的模型继承了 BaseModel。并且使用了ThinkORM 的搜索器功能,至于什么是搜索器?,可以查看 ThinkORM 文档。

搜索器加强

如果控制器中传递参数是通过“=”进行数据查询的,这里不用写搜索器,因为在SaiAdmin中已经内置好了,内置的位置就是basicLogic里面的search方法,例如在下面这个控制器中,我们定义了两个字段的搜索,title我们在上面的模型中看到,做了like方式的搜索器处理,但是author我们未作处理还是可以实现搜索功能,这是因为SaiAdmin内置了=方式的搜索器,我们只需要在控制器中定义即可:

php
<?php
  #---省略代码------------------------
    /**
     * 数据列表
     * @param Request $request
     * @return Response
     */
    public function index(Request $request): Response
    {
      $where = $request->more([
            ['title', ''],
            ['author', ''],
        ]);
        $query = $this->logic->search($where);
        $data = $this->logic->getList($query);
    }