TP5 ORM模型操作数据库

一、直接操作数据库

//控制器  banner
<?php

namespace app\api\controller\v1;

use app\api\validate\IDMustBePostiveInt;
use app\api\model\Banner as BannerModel;
use app\lib\exception\BannerMissException;
use think\Exception;

class Banner
{
    public function getBanner($id){

        (new IDMustBePostiveInt()) -> goCheck();
        $banner = BannerModel::getBannerById($id);

        if(!$banner){
            //抛出异常  自定义异常
            throw new BannerMissException();
        }

        return json($banner);
    }
}
//查询 数据库
<?php

namespace app\api\model;

use think\Db;

class Banner
{
    public static function getBannerById($id)
    {
        //三种方式操作数据库
        //  一、直接操作数据库
        $result = Db::query('select * from banner_item where img_id = ?', [$id]);

        //  二、使用构造器
        //  三、使用模型、关联模型
        return $result;
    }
}
//建议路由定义模式
<?php

use think\Route;

Route::rule('api/v1/banner', 'api/v1.Banner/getbanner');

         目录+数据库配置

二、查询构造器

<?php

namespace app\api\model;

use think\Db;

class Banner
{
    public static function getBannerById($id)
    {
        //三种方式操作数据库
        //  一、直接操作数据库
        //  $result = Db::query('select * from banner_item where img_id = ?', [$id]);

        //  二、使用构造器
        //  Db和where查询出的是query对象,只有调用find或select才会查询出结果,这就是链式编程
        //  find()只查询一个
        //  select()查询多个
        $result = Db::table('banner_item') -> where('img_id', '=', $id)
            -> select();
        //where('字段名', '表达式', '查询条件');

        //数组法(官方不推荐)  表达式(同上)  闭包(同下)

        //$result = Db::table('banner_item')
        //-> where(function ($query) use ($id){
        //$query -> where('banner_id', '=', $id);
        //})
        // -> select();


        //  三、使用模型、关联模型
        return $result;
    }
}
//加入fetchsql语句获取执行的sql语句  
$result = Db::table('banner_item')
-> fetchSql()
-> where(function ($query) use ($id){
$query -> where('banner_id', '=', $id);
})
-> select();


//同上
$result = Db::table('banner_item') -> fetchSql() -> where('img_id', '=', $id)
            -> select();


//执行结果
"SELECT * FROM `banner_item` WHERE `img_id` = 1"

三、开启SQL日志记录

//public 下的index文件  开启sql日志记录
//建议生产环境不要开启(尽量节省空间)    调试环境可以打开方便查找
<?php
// [ 应用入口文件 ]

// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');

//自定义日志位置  覆盖原来日志位置
define('LOG_PATH', __DIR__ . '/../log/');

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

\think\Log::init([
   'type' => 'File',
    'path' => LOG_PATH,
    'level' => ['sql']
]);

四、模型查询数据库  初识模型

//banner控制器  调用Model  获取数据库信息
<?php

namespace app\api\controller\v1;

use app\api\validate\IDMustBePostiveInt;
use app\api\model\Banner as BannerModel;
use app\lib\exception\BannerMissException;
use think\Exception;

class Banner
{
    public function getBanner($id){

        //静态类
        $banner = BannerModel::get($id);

        //实例化对象
        //$banner = new BannerModel();
        //$banner = $banner -> get($id);

        //查询动词
        //get, find, all, select

        return json($banner);

    }
}
//模型控制器
<?php

namespace app\api\model;

use think\Model;

class Banner extends Model
{
}

//如果返回结果没有自动转化成JSON  需要手动配置config文件

 // 默认输出类型
    'default_return_type'    => 'json',

 五、模型名字应和数据库表名相同    若要修改操作数据   可以采用如下方式

//修改操作数据库   模型
<?php

namespace app\api\model;

use think\Model;

class Banner extends Model
{
    protected $table = 'category';
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值