Laravel数据库操作(11.5培训)

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学院

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,330评论 0 11
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,423评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,597评论 18 139
  • 亮仔是和我从小玩到大的伙伴,或者说,是跟在我屁股后面的小弟。 他住我家对门,没事就往我家跑。有一次我被父亲锁在楼...
    俏叶磊阅读 436评论 0 2
  • 姓名:李小龙 温州博奕成套工程有限公司 组别 利他一组 【日精进打卡第2天】 【知~学习】 《六项精进》2遍 共2...
    7bec976c3bf2阅读 204评论 0 0