目录
创建控制器
php artisan make:controller SqlController
获取单条数据
$a = DB::table('users')->where(['id'=>3])->first();
获取多条数据
$a = DB::table('users')->get();
更新数据
$bool = DB::table('users')->where('id', 2)->update(['email' => 'feiru@666.com']);
增加数据
//调用facker类 自动生成数据 use Faker\Generator as Faker;
$data = DB::table('users')->insert([
['email' => $faker->email, 'name' => $faker->name , 'password'=>'$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'],
['email' => $faker->email, 'name' => $faker->name , 'password'=>'$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'],
]);
//insertOrIgnore 方法用于忽略重复插入记录到数据库的错误
DB::table('users')->insertOrIgnore(
[ ['id' => 1, 'email' => 'taylor@example.com'],
['id' => 2, 'email' => 'dayle@example.com'] ]
);
// insertGetId 方法来插入记录并返回 ID 值
$id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0] );
查询指定的字段值
$result = DB::table('users')->where('id', '>' ,2)->get(['id', 'email', 'password']);
$columnInfo = ThemeColumn::where("id", $columnId)->select('id','column_name','english_name','introduce','parent_id')->first()->toArray();
模糊查询 like
$result1 = DB::table('users')->where([
['email', 'like' , 'feiru%'],
])->get();
获取单个值
$email = DB::table('users')->where('name', '=', 'Bethany Toy')->value('email');
pluck 单列值的集合
$pluck = DB::table('users')->where('id', '>', 2)->pluck('email');
闭包加条件
$user = DB::table('users')->where('id', '>', 2)->where(function ($query) {
$query->where('id' , '<', 6)
->orWhere('email_verified_at', '=', '2020-07-19 14:15:24');
})->get();
连表查询 ,join,左连,右连
//join
$result = DB::table('users as a')
->join('password_resets as b', 'a.email', '=', 'b.email')
->first();
//使用leftJoin 或者 rightJoin 方法。这两个方法与 join 方法用法相同:
$users = DB::table('users')->leftJoin('posts', 'users.id', '=', 'posts.user_id')->get(); $users = DB::table('users')->rightJoin('posts', 'users.id', '=', 'posts.user_id')->get();
删除数据
$del =DB::table('users')->where('id',1)->delete();
whereColumn 方法用于比较两个字段的值 是否相等
$users = DB::table('users') ->whereColumn('first_name', 'last_name') ->get();
自增 & 自减
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
//可以在操作过程中指定要更新的字段
DB::table('users')->increment('votes', 1, ['name' => 'John']);
//原来的基础上加1
ArticleModule::where('id',$id)->update(['visit_times'=>DB::raw('visit_times+1')]);
清空表
DB::table('users')->truncate();ph
调试 sql语句
//使用 dd 或者 dump 方法输出查询结果或者 SQL 语句。 使用 dd 方法可以显示调试信息,然后停止执行请求。 dump 方法同样可以显示调试信息,但是不会停止执行请求:
DB::table('users')->where('votes', '>', 100)->dd();
DB::table('users')->where('votes', '>', 100)->dump();
事务
//处理死锁 自动
//transaction 方法接受一个可选的第二个参数 ,该参数用来表示事务发生死锁时重复执行的次数。一旦定义的次数尝试完毕,就会抛出一个异常:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
}, 5);
//手动
// 开启事务
DB::beginTransaction();
try{
DB::table('users')->update(['votes' => 1]);
//中间逻辑代码
DB::commit();
}catch (\Exception $e) {
//接收异常处理并回滚
dump($e->getMessage());
DB::rollBack();
}
order排序
$column = ThemeColumn::where("theme_id", $themeId)->orderBy('sort','asc')->get();