model层。
model对应的是实体,也就是数据库中的实体。主要说明model能干啥,model保存当前数据库的实体,可以通过对象的形式对数据库进行增删改查。
这个版本5.0.3中得手动创建Model文件夹,然后再去通过数据库中的表明创建相对应的model。
1,首先在当前控制器下边创建当前控制器下所需要的model文件夹,然后在model文件夹中创建model类。
mkdir application/admin/model 创建完成后去再model下创建Model文件。主要结构:
model层。
model对应的是实体,也就是数据库中的实体。主要说明model能干啥,model保存当前数据库的实体,可以通过对象的形式对数据库进行增删改查。
这个版本5.0.3中得手动创建Model文件夹,然后再去通过数据库中的表明创建相对应的model。
1,首先在当前控制器下边创建当前控制器下所需要的model文件夹,然后在model文件夹中创建model类。
mkdir application/admin/model 创建完成后去再model下创建Model文件。主要结构:
model文件夹下的model文件命名是有规则的,如果在数据库配置文件中设置了前缀,那么model名中就不能有前缀的字样。
规则:
模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如:
模型名 | 约定对应数据表(假设数据库的前缀定义是 think_) |
User | think_user |
UserType | think_user_type |
完了就创建model,这里创建了一个Ad.php,也就是我数据库表中的Pre_ad表。
首先得命名空间,然后引用基类的model,并且继承基类的model:
<?php namespace app\admin\model; use think\Model; class Ad extends Model { }
Model类就完成了,现在就能在控制器下边操作当前model。
Model下的类型转换:
class User extends Model { protected $dateFormat = 'Y/m/d'; protected $type = [ 'status' => 'integer', 'score' => 'float', 'birthday' => 'timestamp', ]; }
控制器下边首先得引用当前的命名:
use app\admin\model\Ad;
<?php namespace app\admin\controller; use think\controller; use think\View; use think\Db; use app\admin\model\Ad; class Index extends Controller { public function getAll() { // $ad = Ad::select(); $ad = new Ad; $ad = $ad->getAllData(); print_r($ad); exit(); } public function testModel() { $ad = Ad::get(13); print_r($ad); exit(); } public function getTest() { $ad = new Ad; $data = $ad->getSingleByAutoID(13); print_r($data); exit(); } public function deleteData() { $ad = new Ad; $success = $ad->deleteSignleByAotuID(44); echo $success; exit(); } public function insertModel() { $ad = new Ad(); $ad->colu_id = 92; $ad->state = 2; $ad->keyword = "insertModel"; $ad->ad_url = "http://www.123xibti.com/"; $ad->rank = 1; $ad->save(); // $ad->colu_id = 93; $ad->state = 2; $ad->keyword = "insertModel"; $ad->ad_url = "http://www.123xibti.com/"; $ad->rank = 1; $ad->isUpdate(false)->save(); } }
一,插入
$user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save();
二,更新:
$user = User::get(1);//首先获取当前model,然后给model中的属性修改值,最后保存 $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save();
三,删除:
删除当前模型 删除模型数据,可以在实例化后调用delete方法。 $user = User::get(1); $user->delete(); 根据主键删除 或者直接调用静态方法 User::destroy(1); // 支持批量删除多个数据 User::destroy('1,2,3'); // 或者 User::destroy([1,2,3]); 条件删除 使用数组进行条件删除,例如: // 删除状态为0的数据 User::destroy(['status' => 0]); 还支持使用闭包删除,例如: User::destroy(function($query){ $query->where('id','>',10); }); 或者通过数据库类的查询条件删除 User::where('id','>',10)->delete();
4,查询:
//单个查询 取出主键为1的数据 $user = User::get(1); echo $user->name; // 使用数组查询 $user = User::get(['name' => 'thinkphp']); // 使用闭包查询 $user = User::get(function($query){ $query->where('name', 'thinkphp'); }); echo $user->name; //多调查询 model->select(); or model->all();
主要链接:http://www.kancloud.cn/manual/thinkphp5/135191
自己对接口的一下想法:
可以通过在model里边整合不同的方法,然后在控制器里边调用,这样就不会那么乱,model里边调用自身的方法,然后创建公共的方法以供控制器使用:
Ad.PHP
<?php namespace app\admin\model; use think\Model; class Ad extends Model { //获取某一列 public function getSingleByAutoID($autoID) { return $this->get($autoID); } //删除某一列 public function deleteSignleByAotuID($autoID) { return $this->destroy($autoID); } //获取所有数据 public function getAllData() { $data = array(); foreach ($this->select() as $selfModel) { # code... $data[] = $selfModel->data; } return $data; } //更新某一列 public function updateDataByAutoID($autoID,$dataArray) { $ad = $this->get($autoID); foreach ($dataArray as $key => $value) { # code... $ad->$key = $value; } return $ad->save(); } //批量插入 public function insertToMore($dataArray) { return $this->saveAll($dataArray); } }
然后在控制器里边调用:
class Index extends Controller { public function getAll() { // $ad = Ad::select(); $ad = new Ad; $ad = $ad->getAllData(); print_r($ad); exit(); } public function testModel() { $ad = Ad::get(13); print_r($ad); exit(); } public function getTest() { $ad = new Ad; $data = $ad->getSingleByAutoID(13); print_r($data); exit(); } public function deleteData() { $ad = new Ad; $success = $ad->deleteSignleByAotuID(44); echo $success; exit(); } public function insertModel() { $ad = new Ad(); $ad->colu_id = 92; $ad->state = 2; $ad->keyword = "insertModel"; $ad->ad_url = "http://www.123xibti.com/"; $ad->rank = 1; $ad->save(); // $ad->colu_id = 93; $ad->state = 2; $ad->keyword = "insertModel"; $ad->ad_url = "http://www.123xibti.com/"; $ad->rank = 1; $ad->isUpdate(false)->save(); } public function updateData() { $ad = new Ad(); $data = array('keyword'=>'updateByNow','state'=>0); echo $ad->updateDataByAutoID(48,$data); exit(); } public function insertDate() { $ad = new Ad(); $data = [ ['colu_id' => 78, 'state' => 8,'keyword' => 'kw1','ad_url' => 'http://www.iahes.com/','rank' => 1], ['colu_id' => 79, 'state' => 8,'keyword' => 'kw2','ad_url' => 'http://www.iahes.com/','rank' => 1], ['colu_id' => 80, 'state' => 8,'keyword' => 'kw3','ad_url' => 'http://www.iahes.com/','rank' => 1], ]; $getArray = $ad->insertToMore($data); //print_r($getArray); exit(); }
最后将json序列化之后输出:
JSON序列化 可以调用模型的toJson方法进行JSON序列化 $user = User::get(1); echo $user->toJson(); 可以设置无需输出的字段,例如: $user = User::get(1); echo $user->hidden(['create_time','update_time'])->toJson(); 或者追加其它的字段: $user = User::get(1); echo $user->append(['status_text'])->toJson(); 设置允许输出的属性: $user = User::get(1); echo $user->visible(['id','name','email'])->toJson(); 模型对象可以直接被JSON序列化,例如: echo json_encode(User::get(1)); 输出结果类似于: {"id":"1","name":"","title":"","status":"1","update_time":"1430409600","score":"90.5"} 或者也可以直接echo 一个模型对象,例如: echo User::get(1);