thinkphp 子查询 闭包

1.最简单 在查询中使用


UserModel::where(‘id’,’in’,function($query){

$query->name(‘book’)->where(‘date’,’=’,’2025-01-07′)->field(‘user_id’);

})->select()

最简单的子查询 分为 2部分 首先 主查询是查询用户的信息,其信息需要由闭包子查询book表中日起为2025-01-07的用户user_id 注意field后面不需要select,且子查询 目标是用一次SQL 语句去查询 不是分步查询!

2.分布标准实现 buildSql

$bsql=BookModel::where(‘date’,’=’,’2025-01-07′)->field(‘user_id’)->buildSql();


UserModel::where(‘id’,’in’,$bsql)->select();

上面使用buildSql()方法来构造语句,然后加入即可。

3.has实现,在模型中可以用has来直接调用关联的模型(tips:with 可以多级关联 A.B B.C 可以实现A.B.C取值)

模型UserModel中

public function book(){

return $this->hasMany(BookModel::Class,’user_id’,’id’);

}

然后使用:

UserModel::has(‘book’,function($query){

$query->where(‘date’,’=’,’2025-01-07′)

})->select();

发表回复