”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Laravel 入门:查询生成器初学者指南

Laravel 入门:查询生成器初学者指南

发布于2024-11-08
浏览:709

Getting Started with Laravel: A Beginner

Laravel 的 查询生成器 提供了一个强大、流畅的界面,用于在 PHP 中构建 SQL 查询。它允许您以富有表现力的、类似 SQL 的语法与数据库交互,同时抽象出大部分复杂性。

我们将演练 Laravel 应用程序中的典型用例,使用查询生成器执行各种任务,例如选择、插入、更新和删除数据。


第 1 步:设置 Laravel 项目

如果您没有 Laravel 项目,您可以按如下方式设置一个:

composer create-project --prefer-dist laravel/laravel laravel-query-builder
cd laravel-query-builder
php artisan serve

确保在 .env 文件中设置数据库配置:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

运行迁移以创建默认表:

php artisan migrate

第 2 步:在控制器中使用查询生成器

让我们创建一个控制器来演示查询生成器的用法:

php artisan make:controller UserController

使用以下代码编辑UserController.php:

get();

        return response()->json($users);
    }

    // Insert a new user
    public function store(Request $request)
    {
        // Step 4: Insert a new user
        DB::table('users')->insert([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        return response()->json(['message' => 'User created successfully!']);
    }

    // Update an existing user
    public function update(Request $request, $id)
    {
        // Step 5: Update user by ID
        DB::table('users')
            ->where('id', $id)
            ->update([
                'name' => $request->name,
                'email' => $request->email,
            ]);

        return response()->json(['message' => 'User updated successfully!']);
    }

    // Delete a user
    public function destroy($id)
    {
        // Step 6: Delete user by ID
        DB::table('users')->where('id', $id)->delete();

        return response()->json(['message' => 'User deleted successfully!']);
    }
}

第 3 步:检索数据

使用查询生成器从用户表中选择所有行:

$users = DB::table('users')->get();
  • 描述
    • DB::table('users') 方法以 users 表为目标。
    • get() 方法检索该表中的所有记录。

响应示例:

[
    {
        "id": 1,
        "name": "John Doe",
        "email": "[email protected]"
    },
    {
        "id": 2,
        "name": "Jane Doe",
        "email": "[email protected]"
    }
]

第四步:插入数据

使用查询生成器插入新用户:

DB::table('users')->insert([
    'name' => 'Alice',
    'email' => '[email protected]',
    'password' => bcrypt('password123'),
]);
  • 描述
    • insert() 方法将新行插入到 users 表中。
    • 数据作为关联数组传递,其中键与列名称匹配。

这会将新用户添加到用户表中。


第5步:更新数据

要更新现有记录,请使用 update():

DB::table('users')
    ->where('id', 1)
    ->update([
        'name' => 'John Smith',
        'email' => '[email protected]'
    ]);
  • 描述
    • where() 子句选择 id = 1 的行。
    • update() 方法修改所选行的姓名和电子邮件字段。

这将更新用户表中 ID 为 1 的用户。


第6步:删除数据

要从数据库中删除记录,请使用delete():

DB::table('users')->where('id', 2)->delete();
  • 描述
    • where()子句指定选择ID为2的用户的条件。
    • delete() 方法从表中删除匹配的行。

这将删除 ID 为 2 的用户。


第 7 步:使用查询生成器进行过滤

您可以链接其他方法来过滤数据或向查询添加条件。

示例:检索具有特定条件的用户

$users = DB::table('users')
    ->where('email', 'like', '%example.com%')
    ->orderBy('name', 'asc')
    ->get();
  • 描述
    • where() 子句添加一个条件,获取电子邮件包含 example.com 的用户。
    • orderBy() 方法按名称升序对用户进行排序。

第8步:分页

Laravel 的查询生成器可以轻松对结果进行分页。

$users = DB::table('users')->paginate(10);
  • 描述
    • paginate() 方法将结果分成几页,每页显示 10 个结果。

第9步:交易

使用数据库事务来确保多个查询执行成功。如果一个查询失败,所有更改都会回滚。

DB::transaction(function () {
    DB::table('users')->insert([
        'name' => 'John Doe',
        'email' => '[email protected]',
        'password' => bcrypt('password123')
    ]);

    DB::table('orders')->insert([
        'user_id' => 1,
        'order_total' => 500
    ]);
});
  • 描述
    • transaction() 方法确保用户和订单表插入均成功执行。如果其中一个失败,两个操作都将回滚。

第 10 步:原始查询

如果您需要运行原始 SQL,Laravel 的查询生成器允许这样做:

$users = DB::select('SELECT * FROM users WHERE id = ?', [1]);
  • 描述
    • select() 方法可用于执行原始 SQL 查询。
    • 它使用准备好的语句(?)来保证安全,防止 SQL 注入。

结论

Laravel 的查询生成器提供了一种强大且灵活的方式与数据库交互,抽象了大部分 SQL 复杂性。通过分解每个部分——检索、插入、更新、删除、过滤等等——您可以以干净、有组织的方式轻松管理数据库交互。

此示例提供了查询生成器的基本指南。随着应用程序的增长,您可以使用更高级的功能,例如连接、子查询和 Eloquent 的预加载。

版本声明 本文转载于:https://dev.to/mdarifulhaque/getting-started-with-laravel-a-beginners-guide-to-query-builder-j0i?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 PHP 中异步执行 cURL 请求?
    如何在 PHP 中异步执行 cURL 请求?
    PHP中的异步Curl请求在PHP中异步执行curl post请求可以提高性能并防止潜在的延迟。以下是如何使用不同的方法实现此目的:使用异步 cURL 函数使用curl_multi_*时,您可以同时执行多个 cURL 请求。下面是一个示例代码:$curl = curl_init($request);...
    编程 发布于2024-11-08
  • 如何将 Boehm 垃圾收集器与 C++ 标准库类(如“std::vector”和“std::string”)集成?
    如何将 Boehm 垃圾收集器与 C++ 标准库类(如“std::vector”和“std::string”)集成?
    将 Boehm 垃圾收集器与 C 标准库结合使用开发多线程 C 应用程序时,Boehm 保守的垃圾收集器对于简化内存非常有用管理。这就提出了如何将 Boehm GC 与 C 标准库的类(如 std::map 和 std::vector)集成的问题。一种方法涉及重新定义全局运算符 ::new 以使用 ...
    编程 发布于2024-11-08
  • 如何在 PHP 中通过 SSH 安全连接到远程 MySQL 服务器?
    如何在 PHP 中通过 SSH 安全连接到远程 MySQL 服务器?
    在 PHP 中通过 SSH 安全连接到远程 MySQL 服务器要为 PHP 数据库连接建立安全隧道,以下 SSH 隧道解决方案提供了一种强大的方法。SSH 隧道设置创建一个通往 MySQL 数据库服务器的 SSH 隧道。为此,请使用如下命令:ssh -fNg -L 3307:10.3.1.55:33...
    编程 发布于2024-11-08
  • 混淆技术真的可以保护可执行文件免受逆向工程的影响吗?
    混淆技术真的可以保护可执行文件免受逆向工程的影响吗?
    保护可执行文件免遭逆向工程:解决方案有限的挑战保护代码免遭未经授权的逆向工程是开发人员持续关注的问题,尤其是当它包含敏感信息。虽然已经提出了各种方法,但重要的是要承认完全防止逆向工程实际上是不可能的。常见混淆技术用户建议的策略,例如代码注入、混淆和自定义启动例程的目的是使反汇编变得不那么简单。然而,...
    编程 发布于2024-11-08
  • 掌握 Laravel 中的 Eloquent where 条件
    掌握 Laravel 中的 Eloquent where 条件
    Laravel 的 Eloquent ORM(对象关系映射)是其突出的功能之一,提供了一种与数据库交互的强大而富有表现力的方式。 Eloquent 提供的一项基本功能是方法,它允许开发人员高效、直观地过滤查询。在本文中,我们将深入研究 where 条件,探索其各种形式和实际用例。 ...
    编程 发布于2024-11-08
  • 在 Gmail 的 Chrome 12+ 更新中如何从剪贴板粘贴图像?
    在 Gmail 的 Chrome 12+ 更新中如何从剪贴板粘贴图像?
    将剪贴板中的图像粘贴到 Gmail:Chrome 12 中的操作方法 Google 宣布能够将剪贴板中的图像直接粘贴到 Gmail使用 Chrome 12 的 Gmail 引发了人们对其底层机制的好奇。尽管使用了最新的 Chrome 版本,一些用户仍然无法找到有关如何在 Webkit 中实现此增强功...
    编程 发布于2024-11-08
  • JavaScript 演示场景竞赛 - JS 版
    JavaScript 演示场景竞赛 - JS 版
    JS1024 于 2024 年回归! 准备好迎接激动人心的挑战! JS1024 回归,通过在 JavaScript、HTML 或 GLSL 中创建令人惊叹的演示(全部在 1024 字节限制内),将开发人员推向极限。无论您是经验丰富的编码员还是新手,这都是您展示创造力和技术技能的机会...
    编程 发布于2024-11-08
  • 第九届 TCmeeting 的更新
    第九届 TCmeeting 的更新
    议程上有几个项目,本文重点介绍第 104 次 TC39 会议 [2024 年 10 月 8 日至 10 日] 的功能提案及其进展。 第一阶段: 表示度量:建议在 JavaScript 中使用适当的单位格式化和表示度量。 Immutable ArrayBuffers:添加 ArrayB...
    编程 发布于2024-11-08
  • 如何使用 CSS 在图像地图上实现鼠标悬停效果?
    如何使用 CSS 在图像地图上实现鼠标悬停效果?
    使用 CSS 设置图像地图鼠标悬停样式创建交互式网页时,通常需要包含具有可单击区域的图像。通常,这是使用图像映射来实现的。然而,事实证明,在鼠标悬停时设置这些区域的样式以提供额外的交互性是难以实现的。过去,尝试使用 CSS 设置这些区域的样式所取得的成功有限,如提供的示例所示:<img src...
    编程 发布于2024-11-08
  • 升级您的前端游戏:无头和静态未来的学习框架
    升级您的前端游戏:无头和静态未来的学习框架
    前端领域正在以惊人的速度发展。忘掉笨重、单一的网站吧——未来属于无头 CMS 和静态网站生成器 (SSG)。这些时尚的强大功能提供了无与伦比的速度、灵活性和安全性,但征服它们需要使用正确的工具。 为了利用他们的力量,开发人员正在转向 Next.js 和 Gatsby,这两个尖端的前端框架塑造了我们...
    编程 发布于2024-11-08
  • 如何修复 PyGame 动画闪烁:故障排除和解决方案
    如何修复 PyGame 动画闪烁:故障排除和解决方案
    PyGame 动画闪烁:故障排除和解决方案运行 PyGame 程序时,您可能会遇到动画闪烁的问题。这可能会令人沮丧,特别是如果您不熟悉使用该框架。PyGame 中动画闪烁的根本原因通常是多次调用 pygame.display.update()。不应在应用程序循环中的多个点更新显示,而应仅在循环结束时...
    编程 发布于2024-11-08
  • JavaScript 中的声明式编程与命令式编程
    JavaScript 中的声明式编程与命令式编程
    当谈到编程方法时,经常会出现两种常见的方法:声明式编程和命令式编程。每个都有其优点和理想的用例,尤其是在 JavaScript 中。让我们通过一些例子来探讨这两种风格。 命令式编程:告诉计算机如何做 命令式编程就像给出一组详细的指令。你告诉计算机如何一步步达到特定的结果。将其视为指导...
    编程 发布于2024-11-08
  • 掌握 NestJS 中的数据验证:类验证器和类转换器的完整指南
    掌握 NestJS 中的数据验证:类验证器和类转换器的完整指南
    Introduction In the fast-paced world of development, data integrity and reliability are paramount. Robust data validation and efficient handl...
    编程 发布于2024-11-08
  • 有多少 Python 包的版本控制正确?
    有多少 Python 包的版本控制正确?
    前几天,当我研究Python包中的漏洞数据库时,我意识到其中的一些包版本无法轻松解析并与其他版本字符串进行比较,因为它们不遵守Python 版本控制 - 旧的 PEP 440 或取代它的版本说明符规范。所以我开始想知道这种情况有多普遍。 Python 包索引上有多少包实际上具有有效版本? 显而易见的...
    编程 发布于2024-11-08
  • 如何在 Web 应用程序中有效地对 Ajax 请求进行排序?
    如何在 Web 应用程序中有效地对 Ajax 请求进行排序?
    排序 Ajax 请求在许多 Web 应用程序中,通常会遇到需要迭代集合并对每个元素发出 Ajax 请求的情况。虽然利用异步请求来避免浏览器冻结很诱人,但有效管理这些请求可以防止服务器过载和其他潜在问题。jQuery 1.5 对于 jQuery 1.5 及更高版本,$. ajaxQueue() 插件提...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3