1.简介
数据库查询构建器提供了一个方便的流接口用于创建和执行数据库查询。查询构建器可以用于执行应用中大部分数据库操作,并且能够在支持的所有数据库系统上工作。
现在向大家介绍的是Laravel下的数据库查询构建器,并且与Model层结合。
2.数据库操作前的准备
(1)Model层
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Grades extends Model{
protected $table = 'grades';
}
其中$table表示的是要连接的数据库中的表
(2)Controller层
<?php
namespace App\Http\Controllers;
use App\Models\Grades;
class TestController extends Controller{
}
注意使用Model一定要use
3.获取结果集
(1)获取所有行
public static function getAll(){
$res = self::get()->toArray();
return $res;
}
(2)获取一行/一列
获取一行数据,使用first()方法
public static function getFirst(){
$res = self::first()->toArray();
return $res;
}
如果你不需要完整的一行,可以使用 value 方法从结果中获取单个值,该方法会直接返回指定列的值:
$res = self::value('name');
获取数据列值列表
如果想要获取包含单个列值的数组,可以使用pluck 方法
public static function getPlunk(){
$res = self::pluck('grade1')->toArray();
return $res;
}
(3)聚合函数
查询构建器还提供了多个聚合方法,如count, max, min, avg 和 sum,你可以在构造查询之后调用这些方法。大家可以去这个网页看一看然后自己试一试
4.查询(Select)
当然,我们并不总是想要获取数据表的所有列,使用 select 方法,你可以为查询指定自定义的 select 子句:
public static function selectName(){
$res = self::select('name', 'grade1 as grade_one')->get()->toArray();
return $res;
}
其中as可以未查询的字段取一个别名
distinct 方法允许你强制查询返回不重复的结果集:
public static function selectDistinct(){
$res = self::select('grade1')->distinct()->get()->toArray();
return $res;
}
5.Where子句
(1)简单where子句
使用查询构建器上的 where 方法可以添加 where 子句到查询中,调用where 最基本的方法需要传递三个参数,第一个参数是列名,第二个参数是任意一个数据库系统支持的操作符,第三个参数是该列要比较的值。
为了方便,如果你只是简单比较列值和给定数值是否相等,可以将数值直接作为where方法的第二个参数(即省略“=”):
public static function getById(){
$res = self::where('id', 2)
->get()->toArray();
return $res;
}
当然,你还可以使用其它操作符来编写where 子句:
$res = self::where('id', '>', 1)
->get()->toArray();
$res = self::where('name', '<>', 'zhangsan')
->get()->toArray();
还可以传递条件数组到 where 函数:
$res = self::where([
[ 'id', '1'],
['name', '<>', 'lisi']
])
(2)Or语句
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
(3)更多where子句
whereBetween/whereNotBetween
whereBetween方法验证列值是否在给定值之间:
$users = DB::table('users')
->whereBetween('votes', [1, 100])->get();
whereNotBetween 方法验证列值不在给定值之间
whereIn/whereNotIn
whereIn 方法验证给定列的值是否在给定数组中:
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
whereNotIn 方法验证给定列的值不在给定数组中:
更多的where子句大家可以在以后的应用过程中接触到
6.排序(orderBy)
orderBy 方法允许你通过给定字段对结果集进行排序,orderBy 的第一个参数应该是你希望排序的字段,第二个参数控制着排序的方向——asc或desc:
public static function getAndOrder(){
$res = self::orderBy('grade1', 'desc')
->orderBy('grade2', 'asc')
->get()->toArray();
return $res;
}
7.插入(Insert)
查询构建器还提供了 insert 方法用于插入记录到数据表。insert 方法接收数组形式的字段名和字段值进行插入操作查询构建器还提供了 insert 方法用于插入记录到数据表。insert 方法接收数组形式的字段名和字段值进行插入操作
你甚至可以一次性通过传入多个数组来插入多条记录,每个数组代表要插入数据表的记录:
public static function insertSome(){
$res = self::insert([
['name' => 'hhh', 'grade1' => 99, 'grade2' => 0, 'grade3' => 55],
['name' => 'sss', 'grade1' => 89, 'grade2' => 78, 'grade3' => 86]
]);
return $res;
}
8.更新(Update)
当然,除了插入记录到数据库,查询构建器还可以通过使用 update 方法更新已有记录。update 方法和 insert 方法一样,接收字段名和字段值的键值对数组包含要更新的列,你可以通过 where 子句来对 update 查询进行约束:
public static function updateOne(){
$res = self::where('id', 1)
->update(['grade3' => 100]);
return $res;
}
查询构建器还为增减给定字段名对应数值提供方便。相较于编写 update 语句,这是一条捷径,提供了更好的体验和测试接口。
increment自增,decrememt自减
这两个方法都至少接收一个参数:需要修改的列。第二个参数是可选的,用于控制列值增加/减少的数目(无参数默认为1)。
9.删除(Delete)
当然,查询构建器还可以通过 delete 方法从表中删除记录,你可以在调用 delete 方法前通过添加 where 子句来添加约束条件:
public static function deleteSome(){
$res = self::where('id', 6)
->delete();
return $res;
}
使用这种方法删除数据,一旦删除便不可恢复。所以在一般的项目开发中不推荐使用这种删除,而是在数据表添加一个is_deleted字段,通过修改该字段的值来控制数据在用户端的显示。
------------------------------------------------------------------------------------------
本文档所介绍的均为最基本的Laravel下的数据库操作,进一步的了解尽在Laravel学院