Web后端初探(8)--THINKPHP中的SQL模型

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

猜你喜欢

转载自blog.csdn.net/qq_39987002/article/details/80869705