一、内容介绍:
- 查询构造器
- 数据迁移
- 数据填充
二、内容讲解:
2.1:查询构造器
Laravel的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口(所有curd都封装了一遍),使用的时候只要调用即可,它可以用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行
Laravel的查询构造器使用PDO参数绑定来保护您的应用程序,所有SQL的操作都是已防SQL注入的用法来进行封装,因此没有必要清理作为绑定的传递字符串或参数
在项目做可能会大量使用db类的查询构造器操作,相比起前面所讲的原生操作方式更加方便,维护也方便以下是常用的一些方法。
实例测试:
查询构造器的语法:
DB::table(table_name);
以下是where 条件的使用写法
# 第一种写法:查询构造器的where 使用写法
# sql语法:select * from user where id = ? ;
$result = DB::table('user')->where('id', 5)->get();
# 第二个种写法:where 的 第二个参数,如果不传 默认是 =
# sql语法:select * from `user` where `id` = ? select * from `user` where `id` > ?
$result = DB::table('user')->where('id', '>', 5)->get();
# 第三种写法:多个where 条件的使用
# sql语法:select * from `user` where `id` = ?select * from `user` where `id` > ?select * from `user` where (`id` > ? and `user` = ?)
$result = DB::table('user')->where([
['id','>', 5],
['user', '=', '测试2'],
])->get();
以上是 查询构造器中 的 where 使用的三种方法,推荐使用的是第三种写法。
查询构造器的链表查询(join)使用
应用场景没什么可解释的,join、inner的操作方式,项目中最常用的方式:
查询构造器的默认使用链接方式是 inner join 链接,如果需要使用其他的链接方式例如(left,right)使用 leftJoin、rightJoin方法
innerJoin 、leftJoin、rightJoin链接参数如下:
第一个参数:要关联的表名
第二个参数:当前表关联表的外键
第三个参数:链接的条件可用(< = > )这几个条件
第四个参数:关联表的链接外键
直接上代码例子:
# 第一种方式:两表联查
# sql语法:select * from `user` inner join `role` on `user`.`role_id` = `role`.`id` limit 1
$result = DB::table('user')
# 第一个参数:要关联的表名
# 第二个参数:当前表关联表的外键
# 第三个参数:链接的条件可用(< = > )这几个条件
# 第四个参数:关联表的链接外键
->join('role', 'user.role_id', '=', 'role.id')
->first();
# 第二种方式:三表一起差
$result = DB::table('user')
>join('role', 'user.role_id', '=', 'role.id')
->join('user_group', 'role.group_id', '=', 'user_group.group_id')
->first();
查询构造器OrderBy、groupBy、limit使用:
orderby可以用 latest\oldst代替:latest是倒序排序而 oldst 是正序排序
# 使用order by 第一种方式
# select * from user order by id desc;
$result = DB::table('user')
->orderBy('id', 'desc')
->get();
# 第二种方式:使用laravel封装好的排序方法:latest倒序排序、oldst正序排序
# select * from `user` order by `id` desc select * from `user` order by `id` desc
# select * from `user` order by `id` descselect * from `user` order by `id` asc
$result = DB::table('user')
// ->latest('id')
->oldest('id')
->get();
GroupBy 使用:
参考地址:https://blog.csdn.net/qq_36663951/article/details/77127267
严格模式:https://blog.csdn.net/huangyuxin_/article/details/78359073
这里有个问题,在使用这个方法的时候一定要把config/database.php 中的 ‘strice’ => true
修改为false(数据库小于5.5的,默认是没有开启严格模式,5.5之后开启了严格模式,laravel中刚好有个是否开启严格模式,所以把strice改为false,这样才能够使用groupby 这个分组)
# 查询构造器使用 groupby
# sql 语法:select * from `user` group by `role_id`
$result = DB::table('user')
->groupBy('role_id')
->get();
查询构造器的CURD操作
新增insert方法:
public function sql()
{
# insert 方法
# 第一种方式:单条数据插入
# sql 语法:insert into `user` (`user`) values (?)
$result = DB::table('user')->insert(['user' => '测试11111s']);
# 第二种方式:批量插入熟(使用二位数组)
# sql语法:insert into `user` (`role_id`, `user`) values (?, ?), (?, ?)
$data = [
['user' => '测试22222', 'role_id' => 1],
['user' => '测试123123', 'role_id' => 2],
];
$result = DB::table('user')->insert($data);
# 第三种方式:返回最后插入的id
$result = DB::table('user')->insertGetId(['user' => 'asdklj', 'role_id' => 2]);
# 更新数据
$result = DB::table('user')->where('id', 17)->update(['user' => '测试123213']);
# 删除数据
# delete from `user` where `id` = ?
$result = DB::table('user')->where('id', 17)->delete();
}
2.2 数据迁移与填充
2.2.1:数据迁移文件入口
数据迁移:主要是帮助程序再换一个环境部署的时候能够快速的上线,不需要为繁琐的数据而烦恼(可以快速的添加一些测试的数据)
下面就是数据迁移路径:
@ 数据迁移文件入口路径:
database\factories
@ 而migrations 里面定义的是数据库迁移的数据表(就是数据迁移测试数据创建的表结构)
@ seeds 数据内容(其实跟factories)是相同的,而factories可以批量添数据
@ factories 测试数据文件
migrations 文件(其实就是创建以下字段的表结构,最终创建成一张表,没有数据)
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('students', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->tinyInteger('sex');
$table->char('age', 3);
$table->timestamps();
});
}
在laravel中就初始化存在了两个数据迁移文件,可以通过命令在一个空的数据库中创建这个文件(就是执行命令创建 migrations 这个文件下的数据迁移的数据表结构,创建这个文件中的数据表结构创建表)
使用命令:
php artisan migrate
执行成功后,打开数据库可查看到刚刚执行这命令后创建的数据库表,如下(注意:刚刚创建的数据表里面是空,没有数据的)
seeds 文件:(其实就是一个为一个表添加一些测试数据,测试方便)
可以在seeds目录下创建一些表数据,如下:
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@qq.com',
'password' => bcrypt('123456')
]);
}
在使用命令生成数据
php artisan db:seed --class=DatabasesSeeder
注意:这里如果出现问题那么就是MySQL的版本有问题或则database.php 的配置问题
database.php 文件配置如下:(下面这个配置是针对MySQL低版本的配置)
2.2.2:数据迁移详解:
迁移文件创建命令
php artisan make:migration create_user_table
可以在后面添加 -create 或则 -table 可用来指定数据表的名称,或是该迁移被执行时是否将创建的新数据表,这些选项需要在与生成迁移文件时填入指定的数据表(其实就是创建一个表结构,然后使用命令创建一张表)
命令使用成功后,会在 database/migrations 目录下生成一个数据迁移文件
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
# 下面再user表创建 一些 字段
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
而上面那个方法则是要指定要创建的表结构
输入命令:php artisan make:migration create_user_table 就会创建一张user表