批改状态:合格
老师批语:方法很多,常用不多, 并不难记不是吗?
实际上where()有三个参数,第一个参数是查询字段,第二个参数是符号,第三个参数是字段值,只是通常情况下都是等于条件,所有当是等于条件时,第二个参数一般就忽略不写,并且如果使用它的大于、小于、不等于 等等判断符号,对数据查询的性能也是有影响的,能避免使用就尽量避免使用
public function where(){$data = DB::table('admin')->where('id',3)->get();echo '<pre>';print_r($data);}

其他符号的使用示例:
$data = DB::table('admin')->where('id','>',3)->get();$data = DB::table('admin')->where('id','<=',3)->get();$data = DB::table('admin')->where('id','<>',3)->get();// 这个表示不等于
传入多个条件时,有两种方式:
// 方式一:$data = DB::table('admin')->where(['username'=>'tom','age'=>25])->get();echo '<pre>';print_r($data);// 方式二:$data = DB::table('admin')->where('username','tom')->where('age',25)->get();echo '<pre>';print_r($data);
实现两个或以上的 or 条件查询
$data = DB::table('admin')->where('age',25)->orWhere('uid',1)->get();echo '<pre>';print_r($data);

通过闭包,我们还可以构建更加复杂的 orWhere 查询。
以下面这张表为例:

我要查询出uid=1的或者是男性,并且年龄小于25的,最终应该是jack、tom、alice三条数据
$data = DB::table('admin')->where('uid',1)->orWhere(function ($query){$query->where('sex','男')->where('age','<',25);})->toSql();echo $data;
生成出来的sql语句如下:
select * from `admin` where `uid` = ? or (`sex` = ? and `age` < ?)
根据sql语句可以看出应该是没有问题的,现在将toSql()改为get():
$data = DB::table('admin')->where('uid',1)->orWhere(function ($query){$query->where('sex','男')->where('age','<',25);})->get();echo '<pre>';print_r($data);

实现区间查询
$data = DB::table('admin')->select(['username','age'])->whereBetween('age',[20,25])->get();echo '<pre>';print_r($data);

PS:这里还支持相关三种:whereNotBetween/orWhereBetween/orWhereNotBetween;
实现数组匹配查询,比如匹配出数组里指定的数据
// $data = DB::table('admin')// ->whereIn('score',[69,78])// ->toSql();// echo $data;// select * from `admin` where `score` in (?, ?)$data = DB::table('admin')->whereIn('score',[69,78])->get(['username','age']);echo '<pre>';print_r($data);

PS:这里还支持相关三种:whereNotIn/orWhereIn/orWhereNotIn;
查询字段为 Null 的记录
$users = DB::table('admin')->whereNull('uid')->toSql();
PS:这里还支持相关三种:whereNotNull/orWhereNull/orWhereNotNull;
查询指定日期的记录
$users = DB::table('admin')->whereDate('create_time', '2020-09-11')->toSql();
PS:这里还支持相关四种:whereYear/whereMonth/whereDay/whereTime,支持 or 前缀;
PS:三个参数支持大于小于之类的操作 orWhereDate(‘create_time’,’>’, ‘2018-12-11’)
什么是中间件?中间件就是当程序接收 HTTP 请求时,拦截后进行过滤和处理;
比如当用户登录时,可以通过中间件进行验证比对,错误后让其跳转到登录页面;
框架系统自带了一些中间件,比如之前 CSRF 令牌保护,就是中间件实现的;
如何创建一个自定义的中间件呢?可以通过一句命令创建一个 check 中间件;
php artisan make:middleware Check
一个完整的中间件包含三个过程:
Middleware目录下新建,也可以使用上述命令行创建注册,在Kernel.php的$routeMiddleware属性中注册
触发,在web.php中添加Route
示例如下:
// 使用命令创建中间件文件php artisan make:middleware Check
现在做一个登录身份验证,如果Http收到id=1的请求,让他进入管理员登录界面,如果没有收到id=1的请求,就是普通员工
php artisan make:controller LoginController
class LoginController extends Controller{public function index(){echo '<b>管理员,你好</b>';}public function login(){echo '<b>普通员工,你好</b>';}}
Route::get('admin','LoginController@index');Route::get('login','LoginController@login');
中间件内容,如下:
<?phpnamespace App\Http\Middleware;use Closure;class Check{// 第一行代码是固定格式public function handle($request, Closure $next){// 中间件拦截请求,如果没有收到这个请求,就让页面跳转到login,普通员工if($request->get('id')!=1){return redirect('login');}// 这行代码也是固定格式,表示继续往下执行return $next($request);}}
protected $routeMiddleware = ['check' => \App\Http\Middleware\Check::class,];
添加中间件路由,设置触发条件
Route::get('admin','LoginController@index')->middleware('check');// 这里的check名和注册中间件时取的键名一致
页面效果如下:
只有id=1时才会进入管理员界面

<?phpDB::select(...sql语句...);DB::insert(...sql语句...);DB::delete(...sql语句...);DB::update(...sql语句...);
<?phpDB::table('admin')->get();DB::table('admin')->first();DB::table('admin')->find(5);DB::table('admin')->value('username');DB::table('admin')->pluck('username');
<?phpDB::table('admin')->where('id',3)->get();DB::table('admin')->where(['username'=>'jack','age'=>20])->get();DB::table('admin')->where('username','jack')->where('age',20)->get()// 还有where的派生查询,如:orWhere,whereBetween,whereIn
<?phpDB::table('admin')->limit(3)->get('id','username','age');DB::table('admin')->limit(2)->get(['id','username','age']);// first与get用法是一样的,只不过只返回找到的第一条数据DB::table('admin')->find(5,['username','email']);// 另外还可以在查询时用select指定查询字段DB::table('admin')->select('username','age')->where('id',3)->get();
<?phpDB::table('admin')->insert(['username'=>'jack','hobby'=>'book']);DB::table('admin')->insert([[...],[...],[...].]);DB::table('admin')->where('id',5)->delete();DB::table('admin')->delete(5);DB::table('admin')->where('id',3)->update(['username'=>'jack','age'=>25]);
<?phpDB::table('admin')->max('score');DB::table('admin')->min('score');DB::table('admin')->avg('age');DB::table('admin')->sum('number');DB::table('admin')->count();
$data = DB::table('admin')->where('age',25)->orWhere('uid',1)->toSql();echo $data;// select * from `admin` where `age` = ? or `uid` = ?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号