Laravel 框架构造器的排序分组.子查询 & JOIN 查询 & 构造器的增删改 ⑦

请添加图片描述

@作者 : SYFStrive

 
请添加图片描述

@博客首页 : HomePage

📜: THINK PHP

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

📌:觉得文章不错可以点点关注 👉:专栏连接🔗


请添加图片描述
相关专栏

👉 VUEJS(🔥)
👉 MYSQL(🔥)
👉 微信小程序(🔥)
👉 PHPMYSQL(🔥)
👉 UNIAPP开发(🔥)


                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

提示:以下是本篇文章正文内容

PHP LARAVEL 简介

  • Laravel是一种流行的开源PHP Web应用程序框架,由Taylor Otwell在2011年创建并发布。它提供了一个简洁优雅的语法和丰富的功能集,旨在使Web开发过程更快速、简单和愉悦。
  1. MVC架构模式:Laravel采用了MVC(Model-View-Controller)架构模,将应用程序的逻辑分为不同的层,提高了代码的可维护性和可测试性。

  2. 简洁的语法和表达力:Laravel框架支持具有简洁而表达力的语法,使得编写清晰、易读、易维护的代码成为可能。

  3. 路由系统:它提供了一个强大且灵活的路由系统,通过简单的配置和代码即可定义Web应用程序的路由规则,实现URL到控制器的映射。

  4. 数据库抽象层:Laravel提供了一个简便的数据库抽象层,支持多种数据库系统,并通过Eloquent ORM提供了一种优雅的方法来与数据库进行交互。

  5. 权限和认证系统:Laravel提供了内置的身份验证和授权功能,使得实现用户身份验证、访问控制和权限管理变得简单和便捷。

  6. 缓存系统:Laravel支持多种缓存后端,包括文件、数据库、Memcached和Redis等,让你可以轻松地实现缓存数据,提升应用程序的性能。

  7. 强大的扩展性:Laravel通过Composer和Packagist等工具提供了丰富的扩展包生态系统,可以快速集成各种功能组件和第三方库,加快开发进程。

  8. 测试支持:Laravel鼓励编写和运行测试,提供了一套丰富的测试工具和断言,帮助开发者确保代码的质量和可靠性。

  • 总的来说,Laravel框架以其易用性、优雅的语法、丰富的功能和强大的扩展性受到了广大开发者的喜爱。它提供了

PHP LARAVEL 构造器的排序分组.子查询

   Select 排序分组

  1. 使用 whereColumn()方法实现两个字段相等的查询结果;
//判断两个相等的字段,同样支持 orWhereColumn()
//支持符号'create_time','>', 'update_time'
//支持符号支持数组多个字段格式['create_time','>', 'update_time']
$users = DB::table('users')
->whereColumn('create_time', 'update_time')
->get();
  1. 使用 orderBy()方法实现 desc 或 asc 排序功能。
//支持 orderByRaw 和 orderByDesc 倒序方法
$users = DB::table('users')
->orderBy('id', 'desc')
->get();
  1. 使用 latest()方法设置时间倒序来排,默认时间字段是 created_at;
//按照创建时间倒序排,默认字段 created_at
$users = DB::table('users')->latest('create_time')->toSql();
  1. 使用 inRandomOrder()方法来随机排序,得到一个随机列表;
//随机排序
$users = DB::table('users')->inRandomOrder()->get();
  1. 使用 skip()和 take()限制结果集,或使用 offset()和 limit();
//从第 3 条开始,显示 3 条
$users = DB::table('users')->skip(2)->take(3)->toSql();
$users = DB::table('users')->offset(2)->limit(3)->get();
  1. 使用 when()方法可以设置条件选择,执行相应的 SQL 语句;
//when 实现条件选择
$users = DB::table('users')->when(true, function ($query) {
	$query->where('id', 19);
}, function ($query) {
	$query->where('name', '小夜');
})->get();

   Select 子查询

  1. 使用 whereExists() 方法实现一个子查询结果,返回相应的主查询;
//通过 books 表数据,查询到 users 表关联的所有用户
$users = DB::table('users')->whereExists(function ($query) {
    $query->selectRaw(1)
        ->from('books')
        ->whereRaw('laravel_books.user_id = laravel_users.id');
})->get();
return $users;
//whereRaw 这句也可以替代为: whereColumn('books.user_id','users.id');
//PS:select 1 from,一般用于子查询的手段,目的是减少开销,提升效率,深入请搜索;
$users = DB::table('users')->whereExists(function ($query) {
    $query->selectRaw(1)
        ->from('books')
        ->whereColumn('books.user_id','users.id');
})->get();
return $users;
  1. 也可以使用 where(字段,function())闭包,来实现一个子查询;
//id=子查询返回的 user_id
$users = DB::table('users')->where('id', function ($query) {
$query->select('user_id')
		->from('books')
		->whereColumn('books.user_id','users.id');
})->toSql();

PHP LARAVEL 构造器的JOIN 查询

  1. 使用 join 实现内联接的多表查询,比如三张表进行 inner join 查询;
$users = DB::table('users')
->join('books', 'users.id', '=', 'books.user_id')
->join('book1s', 'users.id', '=', 'books.user_id')
->select('users.id', 'users.name',
'books.name', 'book1s.name')
->get();
  1. 也可以使用 leftjoin 左连接或 rightjoin 右连接实现多表查询;
$users = DB::table('users')
    ->leftJoin('books', 'users.id', '=', 'books.user_id')
    ->rightjoin('book1s', 'users.id', '=', 'book1s.user_id')
    ->select('users.id', 'users.age', 'users.sex',
        'books.name', 'book1s.price')
    ->get();
return $users;
  1. 使用 crossjoin 交叉连接查询,会生成笛卡尔积,再用 distinct()取消重复;
$users = DB::table('users')
    ->crossJoin('books')
    ->select('name')
    ->distinct()
    ->get();
return $users;
  1. 如果你想要实现闭包查询,和 where 类似,只不过要用 on 和 orOn 方法;
$users = DB::table('users')
    ->join('books', function ($join) {
        //支持 orOn 连缀
        $join->on('users.id', '=', 'books.user_id');
    })->get();
return $users;

eg:on()方法后面如果想要再增加筛选条件,可以追加 where();

  1. 使用 joinSub 实现子连接查询,将对应的内容合并在一起输出;
    //子连接查询
 $query = DB::table('books')->selectRaw('user_id,price');
 $users = DB::table('users')->joinSub($query, 'books', function ($join) {
     $join->on('users.id', '=', 'books.user_id');
 })->get();
 return $users;
  1. 使用 union()或 unionAll()方法实现两个查询的合并操作;
//union 取消重复,unionAll 不取消重复
$query = DB::table('books');
$users = DB::table('books')
    ->union($query)
    ->get();
return $users;

PHP LARAVEL 构造器的增删改

  1. 使用 insert()方法可以新增一条或多条记录;
$users = DB::table('books')->insert([
    [
        'name' => '李白',
        'user_id' => 1,
        'price' => 18.8,
    ],
    [
        'name' => '李白',
        'user_id' => 1,
        'price' => 18.8,
    ]
]);
return json_encode($users);
  1. 使用 insertOrIgnore()方法,可以忽略重复插入数据的错误;
//忽略重复新增数据的错误
DB::table('books')->insertOrIgnore([
    'id' => 3,
    'name' => '李白',
    'user_id' => 1,
    'price' => 18.8,
]);
  1. 使用 insertGetId()方法,获取新增后的自增 ID;
//获取新增后返回的 ID
$id = DB::table('books')->insertGetId([
    'name' => '李白',
    'user_id' => 1,
    'price' => 18.8,
]);
return $id;
  1. 使用 update()方法,可以通过条件更新一条数据内容;
$result = DB::table('books')->where('id', 3)
    ->update([
        'name' => '小李白',
        'user_id' => 1,
        'price' => 1800.8,
    ]);
return $result;
  1. 使用 updateOrInsert()方法,可以先进行查找修改,如不存在,则新增;

//参数 1:修改的条件
//参数 2:修改的内容(新增的内容)

$result = DB::table('books')->updateOrInsert(
    ['id' => 3],
    [
        'name' => '李x白',
        'user_id' => 1,
        'price' => 180.8,
    ]
);
return var_dump($result);
  1. 更新数据时,可以使用自增 increment()和自减 decrement()方法;

//默认自增/自减为 1,可设置

DB::table('books')->where('id', 3)->increment('price',666.66);
DB::table('books')->where('id', 3)->decrement('price',666.66);
  1. 使用 delete()删除数据,一般来说要加上 where 条件,否则清空;
//删除一条数据
$result = DB::table('books')->delete(4);
return $result;
$result = DB::table('books')->where('id', 4)->delete();
return $result;
//清空
$result = DB::table('books_copy1')->delete();
return $result;
$result = DB::table('books_copy1')->truncate();
echo $result;

最后

以上是个人学习 THINKPHP 的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SYFStrive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值