数据库 - Laravel ORM

优质
小牛编辑
128浏览
2023-12-01

Laravel ORM Eloquent

使用时请注意长连接的异常处理,否则会出现 PDO::prepare():MySQL server has gone away

安装

  1. composer require illuminate/database

注意

有个问题就是安装了illuminate/database不能分页,需要安装illuminate/pagination; illuminate/pagination有个坑,在分页另说

添加数据库配置

\EasySwoole\Config 中添加配置信息:

  1. 'database' => [
  2. 'driver' => 'mysql',
  3. 'host' => '',
  4. 'database' => '',
  5. 'username' => '',
  6. 'password' => '',
  7. 'charset' => 'utf8',
  8. 'collation' => 'utf8_general_ci',
  9. 'prefix' => ''
  10. ]

初始化DB配置

\EasySwoole\EasySwooleEvent框架初始化完成 事件中初始化数据库类配置

  1. use Illuminate\Database\Capsule\Manager as Capsule;//如果你不喜欢这个名称,as DB;就好
  2. // 初始化完成
  3. function static frameInitialized()
  4. {
  5. // 初始化数据库
  6. $dbConf = Config::getInstance()->getConf('database');
  7. $capsule = new Capsule;
  8. // 创建链接
  9. $capsule->addConnection($dbConf);
  10. // 设置全局静态可访问
  11. $capsule->setAsGlobal();
  12. // 启动Eloquent
  13. $capsule->bootEloquent();
  14. }

测试集成是否正常

数据库初始化完成后即可在控制器内使用,让我们先确认一下Eloquent是否能正常工作

  1. // 在Index控制器类添加以下方法
  2. function index()
  3. {
  4. $version = Capsule::select('select version();');
  5. $this->response()->write($version);
  6. }

重启服务后访问http://localhost:9501看到数据库的版本,即可正常使用Capsule操作数据库以及使用模型处理业务逻辑,操作方法和laravel原生的操作方法基本是一致的,可以参考laravel官方的操作手册 Eloquent ORM 中文文档

数据库操作

数据库操作和Laravel是一致的,主要由Capsule访问数据库的,可以使用常规的链式方法查询,如

  1. $users = Capsule::table('users')->where('votes', '>', 100)->get();

也可以直接执行查询语句

  1. $results = Capsule::select('select * from users where id = ?', array(1));

默认返回的是一个数组,如果需要返回数据集也可以在配置文件中添加配置,和TP添加配置是一样的方法,在此就不再赘述

模型操作

使用Eloquent的结构生成器创建数据库的表


创建table.php文件

  1. <?php
  2. use Illuminate\Database\Capsule\Manager as Capsule;
  3. Capsule::schema()->create('users', function ($table) {
  4. $table->increments('id');
  5. $table->string('email')->unique();
  6. $table->timestamps();
  7. });

然后我们运行table.php,命令行运行:

  1. php table.php

也可以在控制器下建表

  1. use Illuminate\Database\Capsule\Manager as Capsule;
  2. // 在Index控制器类添加以下方法
  3. function index()
  4. {
  5. Capsule::schema()->create('users', function ($table) {
  6. $table->increments('id');
  7. $table->string('email')->unique();
  8. $table->timestamps();
  9. });
  10. }

重启服务后访问http://localhost:9501,然后我们的查看MySQL数据库里就会有一个users表了

使用模型


  1. use Illuminate\Database\Eloquent\Model as Eloquent;
  2. class User extends Eloquent
  3. {
  4. protected $table = 'users';
  5. }

然后我们可以很方便的像在Laravel框架里一样使用Eloquent了:

  1. function index(){
  2. // 查询id为2的
  3. $users = User::find(2);
  4. // 查询全部
  5. $users = User::all();
  6. // 创建数据
  7. $user = new User;
  8. $user->username = 'someone';
  9. $user->email = 'some@xxx.com';
  10. $user->save();
  11. }

更多关于Eloquent的使用请参考 Eloquent ORM 中文文档

其他着名 ORM

还有很多着名的 ORM 和 Datamapping(数据库迁移等) 包,参见: ORM and Datamapping