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);

