StartMVC开发手册

可以快速上手的开发文档

模型

模型(Model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,负责项目中的“数据+ 业务逻辑”. 模型是独立于控制器和视图。通过模型可以避免代码重复以及易于扩展。模型不是必需的,可以根据自己的业务逻辑进行使用。

自定义模型

模型存放在模块下的Model目录下,模型为一个类,一个模型类就是一个php文件。

模型类名为:模型名称Model(首字母大写)。

模型文件名为:模型名称Model.php(首字母大写)。

命名空间为:App\模块\Model(单模块为:App\Model,所有首字母大写)。

所有控模型都继承于公共模型Startmvc\Core\Model。

// app/Home/Model/TestModel.php
namespace App\Home\Model;
use Startmvc\Core\Model;
class TestModel extends Model{
  protected $table='Test';
  function say(){
    echo 'hi';
  }
}

调用自定义模型

在控制器、模型和视图中,可以使用$this->model()方法来实例化一个模型,或者在控制器中通过依赖注入实例化一个模型。

// 通过方法载入模型

namespace App\Home\Controller;
use Startmvc\Core\Controller;
class IndexController extends Controller {
  function indexAction(){
      $test = $this->model('Test');
      $test = $this->model('Test', 'Home');
      // $this->model()的第二个参数是模块名,可以实现跨模块共享模型
      $test->say();
      // 或者
      $this->model('Test')->say();
      //如果一个模型实例只用一次,可以用链式操作
  }
}

公共模型的方法

为了减少代码的重复量,公共模型中内置了两个方法,可以在自定义模型、控制器以及视图文件中调用。

调用单条数据

find($field="*",$where='',$getsql=false)

$field, 需要调用的字段,比如id,title,content,当为*或空时,调用全部字段。

$where,条件语句,$where必须为数组或数字,比如:

['id'=>2,'status'=>1] 调用id为2并且status为1的一条数据

find('*',5) 调用id为5的数据,当$where为数字时,默认条件为where id=

$getsql=true时返回sql语句

调用多条数据

findAll($field="*",$where=[],$order='',$limit='',$getsql=false)

$field, 方法同find

$where,条件语句,方法同find

$order, 结果集排序,比如"id","id desc",'rand()'

$limit,调用条数,比如“10”,"10,20"

$getsql, 是否返回sql语句

更新数据

update($data,$where=[])

$data,需要更新的数据,数组类型;

$where,条件语句,$where必须为数组

return 结果返回影响条数(int)

更新数据

delete($where='')

$where,条件语句,$where可为数组、数字或空,当$where为数字时,默认删除id=数字这条数据,当$where 为空时,会执行TRUNCATE(清除)方法

return 结果返回影响条数(int)


在自定义的模型调用公共模型

自定义test模型 TestModel.php调用公共模型的方法样式如下

$this->find('*',1);
Model::find('*',1);
$this->model('test')->find('*',1);
self::find('*',1);
parent::find('*',1);
$this->update(['name'=>'小红'],['id'=>2]);
$this->delete(['id'=>5]);
$this->delete(5);
$this->delete();

说明在自定义模型中务必定义一个变量$table,变量中的值通常为表名

<?php
namespace App\Home\Model;
use Startmvc\Core\Model;

class TestModel extends Model{

	protected $table='Test';//表名
	
	function getData(){
	    //return $this->find('*',3);
	    //return Model::find('*',3);
	    //return $this->model('test')->find('*',3);
	    //return self::find('*',2);
	    return parent::find('*',3);
	}
}

在控制器、视图中调用公共模型

在控制器或视频中调用公共模型使用 $this->model(),比如:

$this->model('test')->find('*',1);
$this->model('test')->findAll('*',['name'=>'小明']);
$this->model('test')->update(['title'=>'startmvc框架是轻量的','update_time'=>time()],['id'=>'6']);
$this->model('test')->delete(8);

上面的test为模型名


更新时间:2020-11-14 08:32:28