需要写在模块的model目录下
注意1:在TP5里面模型也不在使用类后缀,直接就是使用去除表前缀后的名称作为模型的名称。(模型名称使用大驼峰的方式)
例如:表的名称为 sh_admin 对应的模型文件名称 Admin.php
例如:表的名称为 sh_goods_attribute 对应的模型文件名称 GoodsAttribute.php
定义sh_user表
建一个和模型同名(不包括前缀)的表
基本操作-增加
完成数据的增加主要有如下几种方法
- 模型对象的save方法(先为对象设置属性)
- 模型类的create静态方法
- 模型对象的saveAll批量添加方法
实操:
<?php
/**
* Created by PhpStorm.
* User: Negoowen
* Date: 2019/9/3
* Time: 14:10
*/
namespace app\index\controller;
use think\Controller;
use app\index\model\User;
use think\Request;
class Modeltest extends Controller{
//model方法学习
/**
* @param Request $request
* @throws \Exception
*/
public function test(Request $request){
//1.数据的增加-模型对象的save方法(先对对象设置属性)
$userModel = new User();
//id username password email ORM
$userModel->username='test1';
$userModel->password=md5('test1');
$userModel->email = 'test1@aaa.com';
$status = $userModel->save();
halt($status);
//2.模型类的create静态方法,出现的原因主要是由于下面的这种设置过于繁琐
$insertData = [
'username' => 'test2',
'password' => md5('test2'),
'email' => 'test2@qq.com',
];
//实际肯定是从表单进行接收
//$data = input('post.');
$obj = User::create($insertData);
//返回值是一个模型对象
var_dump($obj->getLastInsID());
halt($obj);
//批量插入数据
$allData = [
[
'username' => 'test31',
'password' => md5('test31'),
'email' => 'test31@qq.com',
],
[
'username' => 'test32',
'password' => md5('test32'),
'email' => 'test32@qq.com',
],
[
'username' => 'test33',
'password' => md5('test33'),
'email' => 'test33@qq.com',
],
];
$userModel = new User();
//返回值是一个数组,数组中每一个元素是成功插入后的对象
$status = $userModel->saveAll($allData);
halt($status);
}
}
基本操作-查看
查询数据主要有如下几种方法
- 模型类的get静态方法【存在返回值为对象,否则为null】
- 通过字段查询getByFieldname()方法
- 根据条件查询get([‘username’ => ‘root’])
- where方法查询->find()
- where方法查询->select()
- 模型类的all静态方法和select静态方法
发现`不行,寻找原因~!!!
转get函数
get()函数运用tatic::parseQuery方法进行查询
转tatic::parseQuery
发现$data参数传入之后会首先判断是否为一个数组,如果是,会进行查询。不是会进行类比对。
get自带limit1!!!被坑了很久
//数据查询
//
//1.模型类get静态方法
$id = ['id' => 11];//主键id id必须为一个数组才可以 id必须为一个数组才可以
//存在则返回模型对象,如果要获取值,可以使用模型的属性进行获取
//如果要使用foreach进行遍历,需要转化为数组
//$obj->toArray();
$info = User::get($id);//get返回符合条件的第一条数据
echo "<h2>模型对象的属性获取</h2>";
var_dump($info->username);
echo "<hr>";
echo "<h2>模型对象的遍历操作</h2>";
$arr = $info->toArray();
var_dump($arr);
foreach ($arr as $k=>$v) {
echo $v."</br>";
}
echo "</hr>";
halt($info);//方法一测试成功,但是目前只能返货id的第一个数据未解决
//2.模型类的get方法(传递其他字段为条件)//where方法
//参数为一个关联数组,
$info = User::get(['username'=>'test2']);
var_dump($info->password);
//var_dump($info);
//只能查出第一组
//3.where方法 如果要获取单条数据使用find()
$info = User::where('username','=','test2')->find();//find指挥查找到符合条件的第一条数据
$arr = $info->toArray();
halt($arr);
//4.根据字段查询
$userModel = new User();
//注意getBy是固定的,后面的字段是表中的字段,使用大驼峰表示
$info = $userModel->getByUsername('test2');
$info = $userModel->getByEmail('test31@qq.com');
var_dump($info->toArray());
//5.select方法 模型类 ,模型对象也可以
//也可以加limit限制;不需要的话去掉即可
//$data = User::select();//获取所有数据
$data = User::where('username','=','test31')->limit(1)->select();//能查找出全部
var_dump($data);
*/
//6.获取所有数据
$data = User::all();//返回的数据是一个数组,但每个元素是一个模型对象
echo '</pre>';
//halt($data);
PS:
get()\find()\all()\select()区别
http://www.xuexianswer.com/5863.html?btwaf=17697633