使用模型(Model)进行SQL查询比之前所叙述的方法都要快速和易读,那么他是如何被构造的呢?
首先在index目录下新建一个与controller并行的文件夹model,建立和数据库"表"名称相同的文件(不含前缀),
namespace app\index\model; //命名空间 use think\Model; class Data extends Model { //表名绑定类名 }
类的名称必须和文件名、表名相同(注意要大写)
如果要求表名不是data而是users,那么必须在类里写道:
protected $name='users';
如果连前缀都不相同,那么需要写:
protected $table='java_users';
不过,不管是官方还是我,都不建议这样做(意义何在? )
[查询]
开始讲如何用
在index.php中写:
首先声明
use app\index\model\Data;正文就可以写$a=Data::get(1); //获取表中主键中的第一个元素
如果超出了现有的数据个数..那就什么都没有哦...
还可以多重条件
$data=Data::get(['id'=>1,'data'=>'这个是1号']);
上式等价于
$data=Data::where('id',1)->find();
[输出]
$data->id //按照对象输出
或者
$data['id'] //按照数组输出
上面的那些方法只能找到一个数据哦
查询多个数据请使用all()
使用的时候使用foreach()来逐个遍历
[插入新数据]
$data=new Data; $data->id=3; $data->data='这个是3号'; $data->save(); //执行保存
[批量新增]
$data=new Data; $list=[ ['id'=>4,'data'=>'这个是4号'], ['id'=>5,'data'=>'这个是5号'], ]; if($data->saveAll($list)){ echo '用户批量新增成功'; };
[查询方法:getByXxxx]
eg.
$data=Data::getByData('这个是1号');
[修改]
$data=Data::get(1); $data->id=4; $data->save(); //注意检查成功,否则返回 $data->getError() //还可以使用检查函数isUpdata(true/false),来决定是更新/插入
[删除]
Data::destroy(1)
或者
$data=Data::get(1);
$data->delete();
[读取器与修改器]
如果想返回更加个性化的数据,那么我们可以修改它的返回值
eg.
要返回正常的时间格式而不是时间戳,我们就要修改model里的方法
protected function getRegTimeAttr($value) { return strtotime($value) }
(第二个传入变量可选,代表的是整个数据对象)
调用时直接写
$data->reg_time
可以看出,命名规则为get+驼峰命名+Attr
(要求原始数据中有这个变量)
类似的还有setRegTimeAttr(写入器):把某个数据修改后存入写入器,方便之后的操作(例如save())