数据模型:比如注册模型,可以给前台使用,也可以给后台使用
1.打开前台模块(application\index)新建model目录
2.在model目录下新建文件user.php(与数据表名称一致)
// 声明命名空间(位置)
namespace app\index\model;
// 导入系统的数据模型
use think\Model;
class User extends Model
{
}
?>
切换到项目目录
php think make:model app\index\model\Users
1.数据模型的名字,建议和数据表名一致
2.如果不一致,可以在模型中设置表名
// 声明命名空间(位置)
namespace app\index\model;
// 导入系统的数据模型
use think\Model;
class User extends Model
{
// 设置查询的表
protected $table="user";
}
?>
3.如果表名中带有”_”(admin_user)模型名称应该是AdminUser
public function index(){
// 实例化数据模型
$user=new \app\index\model\User;
dump($user::get(3)->toArray());
}
$data=User::get(3);
dump($data->toArray());
$user=new User();
$res=$user->get(3);
dump($res);
$user=Loader::model("user");
$res=$user->get(3);
$user=model("user");
$res=$user->get(3);
dump($res->toArray());
1.get方法
// 使用数字
$res=User::get(1); //默认查找主键
// 使用数组
$res=User::get(["name"=>"甜甜"]); //自定义查找
// 使用闭包函数
$res=User::get(function($query){
$query->where("id",3);
});
2.find方法
$res=User::where("id",3)->find();
// all
// 所有数据
$res=User::all();
// 字符串
$res=User::all("4,5");
// 数组
$res=User::all([5,6,7]);
// 数组
$res=User::all(["pass"=>"12"]);
// 闭包
$res=User::all(function($query){
$query->where("pass","123")->whereOr("pass","12")->order("id","desc");
});
// select 和all类似
$res=User::select();
$res=User::select(4);
$res=User::limit(2)->select();
foreach ($res as $key => $value) {
dump($value->toArray());
}
// 获取某个值
$res=User::where("id",5)->value("name");
// 获取某列值
$res=User::column("name,id,pass",'id');
// 查询出匹配的第一条数据
// getBy字段名
$res=User::getByName('甜甜');
$res=User::getByPass('12');
$res=User::getByAge('12');
dump($res->toArray());
// 返回影响行数
$user=new User();
$user->name="wanli";
$user->pass="123";
$user->age="123";
dump($user->save());
// 返回影响行数
$user=new User();
$user->data([
"name"=>"xixi",
"pass"=>"xixi",
"age"=>11
]);
dump($user->save());
// 实例化
$user=new User([
"name"=>"实例化",
"pass"=>"shilihua",
"age"=>20
]);
$user->save();
// allowField(true)屏蔽数据库中不存在的字段
$user=new User([
"name"=>"实例化",
"pass"=>"shilihua",
"age"=>20,
"sex"=>123
]);
$user->allowField(true)->save();
// allowField(true)屏蔽数据库中不存在的字段
$user=new User([
"name"=>"实例化",
"pass"=>"shilihua",
"age"=>20,
"sex"=>123
]);
$user->allowField(["name","age"])->save();
$user=new User([
"name"=>"wanli",
"age"=>20,
"pass"=>"wanli",
]);
$user->allowField(["name","age","pass"])->save();
echo $user->id;
$user=new User();
$list=[
["name"=>"zhangsan","age"=>20,"pass"=>"zhangsan"],
["name"=>"lisi","age"=>20,"pass"=>"lisi"]
];
$user->saveAll($list);
$user=model("User");
$user=User::create([
"name"=>"lalla",
"age"=>35,
"pass"=>"lalla"
]);
public function delete(){
$user=User::get(11);
// 返回影响行数
dump($user->delete());
// 删除主键对应的数据
$user=User::destroy(12);
// 删除多条数据
$user=User::destroy("12,13,14");
// 删除name对应的数据
$user=User::destroy(["name"=>"tian"]);
// 删除多个条件
$user=User::destroy(["name"=>"张三","pass"=>"123"]);
// 使用闭包
$user=User::destroy(function($query){
$query->where("id","<","18");
});
// 删除数据
$user=User::where("id",">","18")->delete();
dump($user);
}
public function update(){
// 设置字段更新数据
$user=User::get(19);
$user->age=81;
$res=$user->save();
dump($res);
// 直接数组修改
$user=new User();
$res=$user->save([
"pass"=>"pass",
"age"=>15,
"name"=>"pass"
],["id"=>19]);
// 修改数据
$_POST["name"]="hahha";
$_POST["pass"]="hahha";
$_POST["age"]=123;
$_POST["sex"]="hahha";
$_POST["id"]=19;
$user=new User();
$res=$user->allowField(['name','pass','age'])->save($_POST,["id"=>$_POST["id"]]);
// 批量更新
$data=[
['id'=>19,'name'=>'abc','pass'=>'1234'],
['id'=>18,'name'=>'abc','pass'=>'1234'],
['id'=>56,'name'=>'abc','pass'=>'1234'],
];
$user=new User();
$res=$user->saveAll($data);
// 更新操作
$user=new User();
$res=$user->where("id",">","50")->update(["age"=>50]);
$res=User::where("id","<","50")->update(["pass"=>"xiaoyu50"]);
// 闭包更新数据
$user=new User();
$user->save(["name"=>"tiantian"],function($query){
$query->where("id","56");
});
dump($res);
}
public function tongji(){
// 统计数据条数
$tot=User::count();
// 条件判断
$tot=User::where("age",">","50")->count();
dump($tot);
// 统计最大值
$max=User::max("age");
dump($max);
// 统计最小值
$min=User::min("age");
dump($min);
// 统计平均值
$avg=User::avg("age");
dump($avg);
// 求和
$sum=User::sum("age");
dump($sum);
}
// sex的获取器
// get+字段+Attr
public function getSexAttr($val){
switch ($val) {
case '0':
return "未知";
break;
case '1':
return "男";
break;
case '2':
return "女";
break;
default:
# code...
break;
}
}
public function getSex(){
// 获取id为56的数据
$user=User::get(56);
// 经过获取器的操作
dump($user->toArray());
dump($user->sex);
// 不经过获取器的处理
dump($user->getData());
}
// 用户密码的修改器
public function setPassAttr($val){
return md5($val);
}
// 修改器
public function setPass(){
// 修改id 为56的密码
$user=new User();
$res=$user->save(['pass'=>"123"],["id"=>56]);
}
1.修改器:可以在数据赋值的时候自动进行转换处理(对手动赋值的字段进行转换)
2.自动完成:数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库(没有手动赋值的字段进行处理)
// 无论更新操作还是添加操作都会执行(一般不用)
protected $auto=[];
// 只在插入时赋值
protected $insert=["create_time","user_status"];
// 只在更新时赋值
protected $update=["update_time","user_status"];
protected function setCreateTimeAttr(){
return time();
}
protected function setUpdateTimeAttr(){
return time();
}
protected function setUserStatusAttr(){
return 1;
}
1.在datebase.php文件中设置
// 自动写入时间戳字段
'auto_timestamp' => true,
2.在数据模型中设置
// 设置自动插入时间戳
protected $autoWriteTimestamp=true;
//设置创建时间字段
protected $createTime="create_times";
//设置更新时间字段
protected $updateTime="update_times";
protected $updateTime=false;
1.model中
namespace app\index\model;
use \think\Model;
// 配合软删除使用(数据库中需要有delete_time字段)
use traits\model\SoftDelete;
class User extends Model
{
//使用软删除
use SoftDelete;
// 设置删除的时间戳(默认是delete_time)
protected $deleteTime="delete_times";
}
?>
2.控制器中
1.软删除数据
$res=User::destroy(66);
2.获取数据
$res=User::get(66);
//软删除 数据库数据存在,但是get获取不到数据
3.真实删除(delete是真实删除)
//数据库中的数据也会被删除
1.$res=User::destroy(66,true);
2.$user=new User();
$res=$user->where("id","55")->delete();
4.读取所有数据(包含软删除的数据)
$res=User::withTrashed()->find(65);
$res=User::withTrashed()->select();
5.仅仅读取软删除数据
$res=User::onlyTrashed()->select();
$res=User::onlyTrashed()->find(65);