public function scopeEmail($query, $value) $query->where('email', 'like', '%'.$value.'%'); // 缝合例子 public function scopePrice($query, $value) $query->where('price', '>', $value); // 强制添加全局查询条件,任何查询都会自动加上这个条件,可写多个 protected $globalScope = ['status']; // 定义强制条件 scopeStatus Status对应上面子组里的值 public function scopeStatus($query) $query->where('status', 1);

Controller

namespace app\controller; use app\model\User as UserModel; use think\facade\Db; class DataModel public function index() // 调用scope方法1 // $res = UserModel::scope('male')->select(); // 调用scope方法2 // $res = UserModel::male()->select(); // 调用scope传参方法1 // $res = UserModel::scope('email', 'xiao')->select(); // 调用scope传参方法2 // $res = UserModel::email('xiao')->select(); // 调用scope缝合方法1 // $res = UserModel::scope('email', 'xiao')->scope('price', '80')->select(); // 调用scope缝合方法2 // $res = UserModel::email('xiao')->price('80')->select(); // withoutGlobalScope() 取消全部强制 withoutGlobalScope('status') 取消()里的强制字段 UserModel::withoutGlobalScope()->select(); // return json($res); return Db::getLastSql(); Model<?phpnamespace app\model;use think\Model;use think\model\concern\SoftDelete;class User extends Model{// scope*** 星号随意 public function scopeMale($query) { $query->where('gender', '男') ->field('id,username,gender,emai
全局作用域 所谓「全局作用域」,指的是预置过滤器在注册该「全局作用域」的 模型 类的所有 查询 中生效,不需要指定任何额外条件。 以User 模型 类为例,我们在系统中可能只想针对已经验证过邮箱的用户进行操作,在没有介绍「作用域」之前,可能你会在应用中到处编写这样的代码: $users = User::whereNotNull('email_verified_at')->... 通过...
1、在 模型 端创建一个封装的 查询 或写入方法,方便控制器端等调用 2、封装一个筛选出权限为1的 查询 ,并且只显示部分字段5条 3、方法名规范:前缀 scope ,后缀随意,调用时直接把后缀作为参数使用 public function scope Male($query) $query->where('type','1') ->field('id','uname','up...
查询 范围 模型 端创建一个封装的 查询 或写入方法,方便控制器端等调用。比如,封装一个筛选所有性别为男的 查询 ,并且只显示部分字段5条。方法名规范:前缀 scope ,后缀随意,调用时直接把后缀作为参数使用: public function scope Male($query) $query->where('gender', '男') ->field('id,username,gender,email') ->limit(5)...
$CustomerModel = new CustomerModel(); // 调用 $data = $CustomerModel->hidden(['deleted'])->find($id); ThinkPHP 6 中的 模型 支持定义关联关系,在定义关联关系后,可以方便地进行关联 查询 ,例如: 假设我们有两个表:`user` 和 `order`,它们的关联关系为一个用户可以拥有多个订单,那么我们可以在 `User` 模型 中定义一个 `orders` 方法,如下所示: ```php namespace app\model; use think\Model; class User extends Model // 定义用户和订单的关联关系 public function orders() return $this->hasMany(Order::class); 然后就可以在控制器或其他代码中使用链式调用进行关联 查询 ,例如: ```php $user = User::with('orders')->find($id); 这样就可以 查询 到指定 ID 的用户及其相关的订单数据。 2. 使用原生 SQL 查询 如果涉及的表比较多或者 查询 条件比较复杂,可以使用原生 SQL 查询 ,例如: ```php use think\facade\Db; $data = Db::query('SELECT u.*, o.* FROM user u LEFT JOIN order o ON u.id = o.user_id WHERE u.id = ?', [$id]); 这样就可以 查询 到指定 ID 的用户及其相关的订单数据。 3. 使用数据库 查询 构造器 ThinkPHP 6 中的数据库 查询 构造器提供了一系列的方法,可以方便地构建 SQL 查询 语句,例如: ```php use think\facade\Db; $data = Db::table('user') ->alias('u') ->leftJoin('order o', 'u.id = o.user_id') ->field('u.*, o.*') ->where('u.id', $id) ->select(); 这样就可以 查询 到指定 ID 的用户及其相关的订单数据。