laravel基础知识之数据库操作

发布时间:2024-12-12 07:36

数据库管理:SQL基础及MySQL操作 #生活知识# #编程教程#

我们可以使用多种方式与数据库交互,包括原生sql,查询构造器,以及Eloquent ORm

1、使用 DB 门面进行数据库的增删改查

DB::insert('insert into users ( id , name , email , password )

values ( ?,?,?,?)',[1,'laravel','laravel@test.com','123']);

DB::select('select * from users where id = ? ',[1]);

DB::select('select * from users where id = :id ',[':id'=>1]);

DB::update('update users set name = "laravelAcademy" where name = ?',['Academy'] );

DB::delete('delete from users where name = ?',['张三']);

DB::statement('drop table users');

2、监听查询事件

在AppServiceProvider的boot方法中定义监听器

function boot(){

DB::listen(function($sql,$bindings,$time){

echo 'sql 语句执行:' . $sql . ', 参数' . json_encode($bindings) . ', 耗时:' . $time . 'ms';

});

}

3、数据库事务

DB门面提供两种方式支持数据库事务

DB::transaction(function(){

DB::table('users')->update(['id'=>1]);

DB::table('posts')->delete();

});

另外一种是beginTransaction(),rollBack(),commit()三种方法一起使用,从而构建一个完整的事务操作

DB::beginTransaction();

if($somethingIsFailed){

DB::rollBack();

return false;

}

DB::commit();

使用查询构造器对数据库进行增删改查,还是依赖DB门面

1、新增数据

a、insert方法接收一个数组,包含要插入的字段名和值

DB::table('users')->insert([

’name‘ => '李四',

’email‘ => '1121323951@qq.com',

'password' => '123456',

])

b、insert还接收一个嵌套数组,进行多条记录插入

DB::table('users')->insert([

['id'=>1,'name'=>'Laravel','email'=>'laravel@test.com','password'=>'123'],

['id'=>2,'name'=>'Academy','email'=>'academy@test.com','password'=>'123'],

['id'=>3,'name'=>'LaravelAcademy','email'=>'laravel-academy@test.com','password'=>'123']

]);

c、使用insertGetId方法来插入记录并获取Id

DB::table('users')->insertGetId(['id'=>1,'name'=>'Laravel','email'=>'laravel@test.com','password'=>'123'])

2、更新数据

update方法接收一个键值对数组,对记录进行更新,返回受影响的行数

DB::table('users')->where('name','Laravel-Academy')->update(['password'=>'123']);

递增递减

DB::table('users')->increment('votes');

DB::table('users')->increment('votes',5);

DB::table('users')->decrement('vote');

DB::table('users')->decrement('vote',5);

DB::table('users')->increment('votes',1,['name'=>'Jone']);

3、删除数据

DB::table('users')->delete();

DB::table('users')->where('id','=',54)->delete();

4、基本查询

a.获取所有数据列

DB::table('users')->get();

DB::table('users')->where('name','=','jone')->get();

b、从数据表中获取单个列或行

$user = DB::tale('users')->where('name','jone')->first();

$email = $user->email;

或者 $email = DB::tale('users')->where('name','jone')->value('email');

c、分块显示数据

DB::table('users')->orderBy('id')

->chunk(10,function($users as $user){

});

d、获取一列的值

$titles = DB::table('roles')->pluck('title');

$titles = DB::table('roles')->pluck('title',‘name’);

e、原生表达式

DB::table('users')->select(DB::raw('name,email'))->where('id','<',3)->get();

f、聚合 count()、max()、min()、avg()、sum()等聚合方法

DB::table('users')->count();

DB::table('users')->max('age');

g、指定一个select语句

DB::table('users')->select('name','age')->get();

h、distinct方法允许你强制返回不重复的结果

DB::table('users')->distinct()->get();

5、查询构造器高级查询

a、连接查询

常见的链接查询有内链接,左连接,右连接,交叉连接

a1.内链接

DB::table('users')

->join('contacts', 'users.id', '=', 'contacts.user_id')

->join('orders', 'users.id', '=', 'orders.user_id')

->select('users.*', 'contacts.phone', 'orders.price')

->get();

a2、左连接

DB::table('users')->leftJoin('posts','users.id','=','posts.user_id')

a3、crossJoin交叉连接,交叉连接在第一个表和连接之间生成笛卡儿积

DB::table('sizes')->crossJoin('colours')->get();

a4、高级join语句

DB::table('users')

->join('contacts',function($join){

$join->on('users.id','=','contacts.user_id')->orOn(...);

})

->get();

DB::table('users')

->join('contacts', function ($join) {

$join->on('users.id', '=', 'contacts.user_id')

->where('contacts.user_id', '>', 5);

})

->get();

b、联合查询

$users = DB::table('users')->where('id','<',3);

$users = DB::table('users')->where('id','>',2)->union($users)->get();

UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同,

另一个Select语句的结果集列名将被忽略,且其他查询字段数必须和第一个相同

c、where子句

1、DB::table('users')->where('列名','操作符',‘比较值’)->get();

2、也可以传递条件数组

DB::table('users')->where([

['status', '=', '1'],

['subscribed', '<>', '1'],

])->get();

3、or语句

DB::table('users')

->where('votes', '>', 100)

->orWhere('name', 'John')

->get();

4、whereBetween方法用来验证字段的值介于两个值之间

DB::table('users')

->whereBetween('votes', [1, 100])->get();

5、whereOrBetween方法验证字段的之不在两值之间

DB::table('users')

->whereNotBetween('votes', [1, 100])

->get();

6、whereIn,whereNotIn方法验证指定字段值在不在数组内

DB::table('users')

->whereIn('id', [1, 2, 3])

->get();

DB::table('users')

->whereNotIn('id', [1, 2, 3])

->get();

7、whereNull,whereNotNull方法验证字段的值是不是null

DB::table('users')

->whereNull('updated_at')

->get();

DB::table('users')

->whereNotNull('updated_at')

->get();

8、whereDate/whereMonth/whereDay/whereYear/whereTime 方法用于比较字段的值和日期

$users = DB::table('users')

->whereTime('created_at', '=', '11:20')

->get();

9、whereColumn方法用于验证两个字段比较

DB::table('users')

->whereColumn('first_name', 'last_name')

->get();

DB::table('users')

->whereColumn('updated_at', '>', 'created_at')

->get();

DB::table('users')

->whereColumn([

['first_name', '=', 'last_name'],

['updated_at', '>', 'created_at']

])->get();

6、排序 orderBy 针对指定字段将查找结果进行排序,第一个参数是排序字段,第二个参数是排序顺序asc或desc

DB::table('users')

->orderBy('name', 'desc')

->get();

latest 和 oldest 方法允许你轻松地按日期对查询结果排序

DB::table('users')

->latest()

->first();

7、groupBy/having方法用来对查询结果进行分组

DB::table('users')

->groupBy('first_name', 'status')

->having('account_id', '>', 100)

->get();

8、查询构造器重使用skip和take对查询结果进行分页,相当于limit语句

$users = DB::table('users')

->skip(10)

->take(5)

->get();

或者使用limit和offset方法

DB::table('users')

->offset(10)

->limit(5)

->get();

网址:laravel基础知识之数据库操作 https://www.yuejiaxmz.com/news/view/450586

相关内容

使用NativePHP构建高效的桌面应用程序,运行于Laravel框架
大数据安全和网络安全基础知识
保育员需要掌握的基础知识和操作技能
基于大模型的日程管理通知系统——数据库设计心得
工作生活中必备的电脑基础知识
Oracle数据库日常维护知识总结
Oracle数据库数据安全面面观
【网络安全】基础知识详解(非常详细)零基础入门到精通
本地生活如何看数据库
刮痧基础知识

随便看看