分表分库之laravel表名重写+数据库动态连接

分表分库,不使用第三方中间件的话,自己根据分库分表的逻辑进行重写表名、库名

use Illuminate\Support\Str;
class Item extends Model {
   
    public $uid;
    //设置用户id,根据用户id进行取模(测试而已,正常用户信息可以放到token里,这样全局公用)
    public function setUid($uid)
    {
        $this->uid = $uid;
    }    
    //重写表名
    public function getTable()
    {
       $tableName = str_replace('\\', '', Str::snake(Str::pluralStudly(class_basename($this)));
       //假设当前道具表分成了10个
       return $tableName.'_'.($this->uid % 10);
       //return 'item_'.($this->uid % 10);
    }
    //重写数据库连接,提前配置好的,具体看自己的业务,不写就是默认连接
   public function getConnection()
    {
        return "default";
    }
}

重写数据库连接,数据库配置就是以saas系统的不同的appid作为key配置。登陆成功后,把appid放到token

namespace xxxxxx;

use support\Model;

class Base extends Model
{
/* 数据库配置文件 /
protected $connection = '';

/**
 * 初始化架构造函数
 */
public function __construct()
{
    //这个是从中间件传出来的
    $appId  = request()->appId;
    $this->connection =  $appId;
}

}
posted @ 2024-07-09 17:36  朝阳1  阅读(105)  评论(0)    收藏  举报