读laravel手册——数据库笔记
Unions
联合查询
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();
Where Clauses
基本的 where 方法需要三个参数。第一个参数是字段的名称,第二个参数是运算符,它可以是数据库所支持的任何运算符。最后,第三个参数是要对字段进行评估的值。
举例:
1. 验证「votes」字段的值等于 100 的查询
$users = DB::table('users')->where('votes', '=', 100)->get();
2. 如果你只是想简单的校验某个字段等于指定的值,你可以直接将这个值作为第二个参数传递给 where 方法
$users = DB::table('users')->where('votes', 100)->get();
3. 你也可以传递条件数组给 where 函数:
$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
4. 你可以一起链式调用 where,也可以在查询添加中 or 语句。orWhere 方法接受与 where 方法相同的参数
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
5.whereIn 方法验证字段的值在指定的数组内
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
whereNotIn 方法验证字段的值不在指定的数组内:
$users = DB::table('users')
->whereNotIn('id', [1, 2, 3])
->get();
6. whereNull/whrerNotNull 方法验证字段的值为/不为 NULL:
$users = DB::table('users')
->whereNull('updated_at')
->get();
7. whereColumn
字段之间的验证,比如:whereColumn 方法用于验证两个字段是否相等
$users = DB::table('users')
->whereColumn('first_name', 'last_name')
->get();
whereColumn 方法也可以传递一个包含多个条件的数组。这些条件将使用 and 运算符进行连接
$users = DB::table('users')
->whereColumn([ ['first_name', '=', 'last_name'], ['updated_at', '>', 'created_at'] ])->get();
When
有时你可能想要子句只适用于某个情况为真时才执行查询。例如,如果给定的输入值出现在传入请求中时,你可能想要判断它能达成某个 where 语句,你可以使用 when 方法来完成此操作:
$role = $request->input('role');
$users = DB::table('users')
->when($role, function ($query) use ($role) { return $query->where('role_id', $role); })
->get();
Update
你也可以使用 update 来更新已存在的记录
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
Delete
查询构造器也可使用 delete 方法从数据表中删除记录。在调用 delete 方法前,还可以通过添加 where 语句来约束 delete 语句:
DB::table('users')->delete();
DB::table('users')->where('votes', '>', 100)->delete();
分页——pagonate
有几种方法可以对数据进行分页。最简单的是在 查询语句构造器 或 Eloquent 查询 中使用 paginate 方法。
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* 展示应用中的所有用户
*
* @return Response
*/
public function index()
{
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);
}
}
显示分页结果
你可以使用 Blade 模板显示结果集并渲染页面链接:
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}