thinkphp在model里面切换分表
最近开始玩各种上TB的数据库,为了提升性能使用了分表
<?php
namespace app\model;
use think\Model;
class Blog extends Model
{
protected $name = 'blog;
protected $suffix = '0000';
public static int $blog_id = 1;
public static function shard(?int $id = null)
{
if (is_null($id)) {
$id = self::$blog_id ;
}
$table = sprintf('%04d', intdiv($id, 10000));
return self::suffix($table);
}
}
读取数据
$blog = Blog::suffix('0001')->find(1);
$blog->name = 'test';
$blog->save();
print_r($blog);
简化一下
Blog::$blog_id =100000;
Blog::shard()->find(1);
批量更新必须初始化才能使用
$data = new Blog;
$data->setSuffix('0002')->saveAll($updateList);
目前基本实现了在blog_0000 blog_0001 blog_0002 等各种分表里面读写数据
感觉thinkphp的model DB切换不是很灵活。
还有一些坑,翻烂了doc文档库都没找到,待更新。