webman手动安装think-orm组件

walkor

webman 1.2版本支持think-orm插件,可自动安装think-orm并配置webman。该插件需要webman>=1.2.1,如果你的webman版本是旧版本,请参考以下文档手动配置安装think-orm。

  • 安装ThinkOrm
    composer require topthink/think-orm

  • 配置文件 config/thinkorm.php 内容如下:

    <?php
    return [
      'default'    =>    'mysql',
      'connections'    =>    [
          'mysql'    =>    [
              // 数据库类型
              'type'        => 'mysql',
              // 服务器地址
              'hostname'    => '127.0.0.1',
              // 数据库名
              'database'    => 'test',
              // 数据库用户名
              'username'    => 'root',
              // 数据库密码
              'password'    => '',
              // 数据库连接端口
              'hostport'    => '3306',
              // 数据库连接参数
              'params'      => [],
              // 数据库编码默认采用utf8
              'charset'     => 'utf8',
              // 数据库表前缀
              'prefix'      => '',
              // 断线重连
              'break_reconnect' => true,
              // 关闭SQL监听日志
              'trigger_sql' => false,
          ],
      ],
    ];
  • 建立数据库初始化文件

    新建support/bootstrap/ThinkOrm.php,内容如下:

    <?php
    namespace support\bootstrap;
    
    use Webman\Bootstrap;
    use Workerman\Timer;
    use think\facade\Db;
    
    class ThinkOrm implements Bootstrap
    {
      // 进程启动时调用
      public static function start($worker)
      {
          // 配置
          Db::setConfig(config('thinkorm'));
          // 维持mysql心跳
          if ($worker) {
              Timer::add(55, function () {
                  $connections = config('thinkorm.connections', []);
                  foreach ($connections as $key => $item) {
                      if ($item['type'] == 'mysql') {
                          Db::connect($key)->query('select 1');
                      }
                  }
              });
          }
      }
    }
    
  • 进程启动配置

    打开config/bootstrap.php,加入如下配置:

    return [
      // 这里省略了其它配置 ...
      support\bootstrap\ThinkOrm::class,
    ];

    进程启动时会执行一遍config/bootstrap.php里配置的类的start方法。我们利用start方法来初始化ThinkORM的配置,业务就直接可以使用ThinkORM了。

  • 使用

    <?php
    namespace app\controller;
    
    use support\Request;
    use think\facade\Db;
    
    class Foo
    {
      public function get(Request $request)
      {
          $user = Db::table('user')->where('uid', '>', 1)->find();
          return json($user);
      }
    }
  • ThinkORM使用文档

    ThinkORM文档地址

7366 5 6
5个评论

Tinywan

赞!

  • 暂无评论
= - =

是要替换默认的 Laravel Eloquent ORM 为 ThinkORM 吗?

  • walkor 2022-03-03

    没有这个意思,只是方便thinkorm的安装。

  • = - = 2022-03-04

    好的,明白了

胤郭郭

好用!给你点赞!

  • 暂无评论
CG内马尔

谢谢博主分享,点赞一下

  • 暂无评论
simagang

单库和一主一从可以用,但是我今天恰好遇到了一个问题
我是4个数据库,2主,2从架构
数据量较大,可能会存在这个情况
因为webman启动后,orm常驻内存,所以用过之后就不会销毁,那么问题来了,
截图
当使用think-orm的模型进行增删改查的操作室,这个$this->linkWrite和$this->linkRead,除了第一次没有值,之后永远有值,不管后面是第几个请求过来,这个时候数据库架构就变成了 1主1从,因为是常驻内存,另外一个主和另外一个从没有机会参与选取,

我也试着让他参数选取“自定义”的一个参数master_election,让程序在执行mysql操作的时候,在两个主库之间进行二选一
截图

事实证明是可行的,可以随机在两个主库当中选择一个
但是问题又来了,
假如A用户在执行事务操作,那么这个时候,读写都应该是在一个主库进行(因为数据量一大有很大几率卡主从),A将master_election(自定义的一个参数)设置为false ,因为是常驻内存,与此同时B用户设置master_election(自定义的一个参数)为 true,这个时候就存在B用户污染了A用户,导致A在主库1执行了新增操作,由于数据量大,卡了一下主从,A在读取时两个master进行选举,选到了主库2,查询没有数据,事务失败

想请教一下楼主怎么解决这个的思路是什么,(有一种办法是一直传参数,从最上层传到最底层,但是不现实)

年代过于久远,无法发表评论

walkor

150981
积分
0
获赞数
0
粉丝数
2014-05-04 加入
×
🔝