一、直接操作数据库
//控制器 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';
}