學習路之PHP--easyswoole操作數據庫
- 0、安裝orm插件
- 一、創建數據庫
- 二、創建模型
- 三、控制器顯示
- 四、效果
- 五、問題
0、安裝orm插件
composer require easyswoole/orm
一、創建數據庫
- 表:
CREATE TABLE `cases` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '標題',`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '內容',`create_time` int(10) NOT NULL COMMENT '創建時間',PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- 隨便寫入幾條數據
INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (1, '示劍網絡副總經理接受電視臺采訪', 'test', 1536223828);
INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (3, '微信小程序超級入口,新一輪紅利又將爆發', 'test', 1605757832);
INSERT INTO `test`.`cases`(`id`, `title`, `content`, `create_time`) VALUES (4, '北京小程序開發公司哪家好?', 'test', 1535963051);
- 配置mysql數據庫連接
打開easyswoole根目錄下的dev文件,跟MAIN_SERVER同級,新增
'MYSQL'=>['host' => '你自己的IP','port' => '端口','user' => 'root','password' => '123456','database' => 'test','timeout' => 5,'charset' => 'utf8mb4',
],
- 注冊配置的mysql數據庫
EasySwooleEvent.php
use EasySwoole\ORM\DbManager;
use EasySwoole\ORM\Db\Connection;class EasySwooleEvent implements Event
{public static function initialize(){// TODO: Implement initialize() method.date_default_timezone_set('Asia/Shanghai');$config = new \EasySwoole\ORM\Db\Config(Config::getInstance()->getConf('MYSQL'));DbManager::getInstance()->addConnection(new Connection($config));}
二、創建模型
App\Models\Case.php
<?php
namespace AppModels;
use EasySwoole\ORM\AbstractModel;
use EasySwoole\Mysqli\QueryBuilder;
/*** 案例模型*/
class Cases extends AbstractModel
{/*** @var string*/ protected $tableName = 'cases'; //表名protected $primaryKey = 'id'; //主鍵public function getAll(int $page = 1, string $keyword = null, int $pageSize = 3): array{$list = $this->limit($pageSize * ($page - 1), $pageSize)->order($this->primaryKey, 'DESC')->withTotalCount()->all(function (QueryBuilder $queryBuilder) use ($keyword) { //用use才能將外部參數傳入閉包$queryBuilder->where('title', "%{$keyword}%", 'like');});$total = $this->lastQueryResult()->getTotalCount(); //獲取結果條數return ['total' => $total, 'list' => $list];}}
三、控制器顯示
App\HttpController\Index.php
use EasySwoole\Http\AbstractInterface\Controller;
use App\Models\Cases;class Index extends Controller
{public function index(){$request = $this->request();$keyword = $request->getRequestParam('keyword');$page = $request->getRequestParam('page')??1;$case = new Cases();$result = $case->getAll($page, $keyword);$this->writeJson(0, $result, "success");
四、效果
五、問題
- ERROR php_swoole_server_rshutdown() (ERRNO 503): Fatal error: Class ‘EasySwoole\ORM\AbstractModel’ not found in /www/wwwroot/easyswoole/App/Models/Cases.php on line 11
解決方案是重啟進程
2. connection : default not register
connection : default not register
#0 /www/wwwroot/easyswoole/vendor/easyswoole/orm/src/Utility/PreProcess.php(18): EasySwoole\ORM\AbstractModel->schemaInfo()
#1 /www/wwwroot/easyswoole/vendor/easyswoole/orm/src/AbstractModel.php(553): EasySwoole\ORM\Utility\PreProcess::mappingWhere(Object(EasySwoole\Mysqli\QueryBuilder), Object(Closure), Object(App\Models\Cases))
#2 /www/wwwroot/easyswoole/App/Models/Cases.php(25): EasySwoole\ORM\AbstractModel->all(Object(Closure))
#3 /www/wwwroot/easyswoole/App/HttpController/Index.php(19): App\Models\Cases->getAll(1, NULL)
解決方案。注冊mysql數據庫配置,
EasySwooleEvent.php
use EasySwoole\ORM\DbManager;
use EasySwoole\ORM\Db\Connection;$config = new \EasySwoole\ORM\Db\Config(Config::getInstance()->getConf('MYSQL'));
DbManager::getInstance()->addConnection(new Connection($config));
最后重啟進程