使用模型(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())