从零开始搭建自己的Swoole框架(十一)数据库模型

前言

数据库操作类自己写不安全,而且也有比较成熟的插件包了,

因此我打算直接引入 Laravel 相同的 ORM。

插件包安装

数据库操作属于框架层面的,因此在框架的目录下执行:

1
composer require illuminate/database

框架目录下也会自动创建一个 composer.json 文件,同时安装完成后会生成 vendor 文件夹。

在框架目录添加 .gitignore 忽略上传 vendor 文件夹。

Blade 包错误修正

在前面完成 blade 模板时,blade 模板的包是在 app 目录下的,

这样就不是在框架里了,因此回到博客目录用 composer remove xiaoler/blade 命令移除 blade 包。

然后再进入框架目录重新安装 blade 即可,这样 blade 模块就属于框架内部了。

框架现在还不是一个 composer 包,因此框架的自动加载文件需要手动添加,

编辑 swoole 启动文件,http_server.php:

1
2
3
4
require './vendor/autoload.php';

// 新增行
require './firerabbit-engine/vendor/autoload.php';

在引入自动加载文件的下一行添加框架的自动加载,这样就完成了。

数据库配置

编辑 app/config/app.php,添加数据库配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$config = [
'view_path' => __DIR__ . '/../view',
'view_cache_path' => __DIR__ . '/../storage/cache/view_cache',

'database' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'blog',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
],
];

return $config;

ORM 模块加载

在框架 module 新建文件夹 Database 用来存储数据库相关功能模块代码,

在 Database 文件夹下新建 Manager.php 用于加载数据库配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
/**
* Created by PhpStorm
* Author:FireRabbit
* Date:2021/2/14
* Time:13:02
**/


namespace FireRabbitEngine\Module\Database;


class Manager
{
protected static $config;

public static function setConfig($config)
{
$db = new \Illuminate\Database\Capsule\Manager();
$db->addConnection($config);
$db->setAsGlobal();
$db->bootEloquent();
}

public static function getConfig()
{
return self::$config;
}
}

setConfig 方法加载一个数组参数的配置。

编辑 http_server.php 加入一行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require './vendor/autoload.php';
require './firerabbit-engine/vendor/autoload.php';
require_once './app/route/web.php';
require_once './app/config/app.php';

\FireRabbitEngine\Module\Http\Middleware\Kernel::setConfig(require './app/config/middleware.php');
\FireRabbitEngine\Module\View\Blade::setConfig($config['view_path'], $config['view_cache_path']);

// 新增行
\FireRabbitEngine\Module\Database\Manager::setConfig($config['database']['mysql']);

$http = new Swoole\Http\Server('0.0.0.0', 9527);

$http->on('request', function ($request, $response) use ($router) {

var_dump('请求URI:' . $request->server['request_uri']);

$router->handle($request, $response);
});

$http->start();

在 on 之前加载数据库配置。

现在这个启动文件已经不堪入目了,等以后再优化

创建 Model

在 app/Http 下新建 Model 文件夹用来保存模型文件。

在 Model 新建第一个模型文件 User:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
/**
* Created by PhpStorm
* Author:FireRabbit
* Date:2021/2/14
* Time:13:05
**/


namespace App\Http\Model;


use Illuminate\Database\Eloquent\Model;

class User extends Model
{
protected $guarded = [];
public $timestamps = false;
}

只要让它继承 Illuminate\Database\Eloquent\Model 即可。

添加数据

打开数据库,在 users 表加入一行数据:

1
2
name:花花 - 001
password:123123

查询数据

打开 IndexController,修改 index 方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/**
* Created by PhpStorm
* Author:FireRabbit
* Date:2/9/21
* Time:1:17 PM
**/

namespace App\Http\Controller\Home;

use App\Http\Model\User;
use FireRabbitEngine\Module\Controller\Controller;
use FireRabbitEngine\Module\View\Blade;

class IndexController extends Controller
{
public function index()
{
$user = User::find(1);
$html = Blade::view('index', ['name' => $user->name]);

$this->showMessage($html);
}
}

原来的代码是直接传入 name 字符串,现在改成从数据库查询数据然后传给模板。

然后测试,发现页面输出了名字:花花 - 001

如此一来,ORM 模块也完成了。

文章作者: 火烧兔子
文章链接: http://huotuyouxi.com/2021/02/14/my-swoole-framework-11/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 火兔游戏工作室