数据库配置

Laravel 框架的数据库的配置代码在 config/database.php 文件内实现,而 database.php 的默认实现是读取 .env 文件的配置。将数据库参数抽取至 .env 文件更方便在切换环境时调整数据库配置

database.php 文件中数据库配置的代码

  1. 'mysql' => [
  2. 'driver' => 'mysql',
  3. 'host' => env('DB_HOST', '127.0.0.1'),
  4. 'port' => env('DB_PORT', '3306'),
  5. 'database' => env('DB_DATABASE', 'forge'),
  6. 'username' => env('DB_USERNAME', 'forge'),
  7. 'password' => env('DB_PASSWORD', ''),
  8. 'unix_socket' => env('DB_SOCKET', ''),
  9. 'charset' => 'utf8mb4',
  10. 'collation' => 'utf8mb4_unicode_ci',
  11. 'prefix' => '',
  12. // 严格模式: MySQL自身对数据进行严格的校验(格式、长度、类型等)
  13. 'strict' => true,
  14. 'engine' => null,
  15. ],

.env 文件中数据库配置的代码

  1. DB_CONNECTION=mysql
  2. DB_HOST=数据库服务器域名
  3. DB_PORT=端口号
  4. DB_DATABASE=数据库名
  5. DB_USERNAME=用户名
  6. DB_PASSWORD=密码

数据库操作

Laraval 架构使用 Illuminate\Support\Facades\DB 门面来操作数据库。该门面在 config/app.php 中已经定义别名 DB,可在项目中直接使用

增加数据

  • insert() : 可以同时添加一条或多条, 返回布尔值
  • insertGetId() : 只能添加一条数据, 返回自增的id

    1. public function createAction() {
    2. // 定义 关联操作的数据表
    3. $db = DB::table('007_news');
    4. // 返回插入结果,支持多条数据
    5. // $result = $db -> insert([
    6. // [
    7. // 'id' => 01,
    8. // 'title' => "知识超萌正式进入开发状态",
    9. // 'cat' => 1,
    10. // ],
    11. // [
    12. // 'id' => 02,
    13. // 'title' => "超萌优选正式进入开发状态",
    14. // 'cat' => 1,
    15. // ],
    16. // ]);
    17. // 返回自增加的id, 只支持单条数据
    18. $result = $db -> insertGetId([
    19. // 'id' => 01, // 不能指定id值, 会自动插入到表中最后id的后面
    20. 'title' => "超萌名片正式进入开发状态",
    21. 'cat' => 1,
    22. ]);
    23. dd($result);
    24. }

    修改数据

  • update() : 可以修改整个记录中的全部字段

  • increment : 修改数字字段的数值,递增
  • decrement : 修改数字字段的数值,递减

    1. public function updateAction() {
    2. $db = DB::table('007_news');
    3. /**
    4. 查询id为181的行, 修改title的数据
    5. * where 指定查询条件,
    6. * update 更新指定数据, 返回值为 "生效的行数(rows affected)"
    7. */
    8. $result = $db -> where('id', '<', '4') -> update([
    9. 'title' => '超萌名片即将进入开发阶段',
    10. ]);
    11. // dd($result);
    12. /**
    13. 查询id为3的行, 对cat(数字类型)进行 +5 操作
    14. * 第二个参数不填时, 则增加值为 1
    15. * decrement用法类似
    16. */
    17. $result = $db -> where('id', '3') -> increment('cat', 5);
    18. dd($result);
    19. }

    查询数据

    Where语法: -> where(字段, 运算符, 值) 如果运算符为 = 号, 可省略不写

  • where方法之后继续调用where方法 ``` // 这个语法是 并且 关系, 即多个 where 同时生效 -> where() -> where() -> where() …

// 这个语法是 或者 关系, 即多个 where 只需要满足其中一个 // orWhere 方法的参数 与where 方法一致 -> where() -> orWhrer() -> orWhere() …


- 获取单行数据

// first函数的返回值是个对象(表示某行的全部数据) DB::table(‘007_news’) -> where(‘id’, ‘1’) -> first();


- 获取具体的值

// value函数的返回值是个具体数据类型 (表示某行的某个数据) DB::table(‘007_news’) -> where(‘id’, ‘1’) -> value(‘name’);


- 获取指定字段的数据(多个字段)

// 查询users表中内每行数据的name与email字段 DB::table(‘users’) -> select(‘name’, ‘email’) -> get();

// 输出数据时, name将以 user_name 的别名形式输出 DB::table(‘users’) -> select(‘name as user_name’) -> get();


- 排序操作

// 按照指定的字段进行特定规则的排序// desc表示降序、 asc表示升序DB::table(‘users’) -> orderBy(‘age’, ‘desc’) -> get();


- 分页操作

// limit: 表示限制输出的数据条数// offset: 表示偏移量(从哪起取数据,从0起算)DB::table(‘users’) -> limit(3) -> offset(2) -> get();

<a name="9mZbt"></a>
## 删除数据
> 物理删除可以通过 `delete` 函数和 `truncate` 函数来实现

- `delete` : 表示删除记录
- `truncate` : 表示清空整个数据表

在删除中, 有两种方式:

- 物理删除(本质是删除数据)
- 逻辑删除(本质是修改数据)

<a name="e25f34a3"></a>
## 执行SQL语句

- 执行任意的 `insert`, `update`, `delete` 语句 【影响使用记录的语句使用 `statement` 语法】

DB::statement(“insert into users values(‘zed’, ‘121722’)”);


- 执行任意的 `select` 语句 【不影响使用记录的语句使用 `select` 语法】

DB::select(“select * from users”); ```