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 的用户及其相关的订单数据。