ThinkPHPV5.0.3 – 4

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_)
Userthink_user
UserTypethink_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);

Leave a Reply

Required fields are marked *