分表怎么创建表模型

1. 运行环境

1). 当前使用的 Laravel 版本?

Lumen (7.2.2)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
7.4.33
//: <> (使用 php --version 命令查看 php 版本)

php-fpm 版本:

3). 当前系统

mac
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )

4). 业务环境

开发环境
//: <> (期待信息 开发环境生产环境)
//: <> (是否使用负载均衡?请提供相关信息)

5). 相关软件版本

nginx/1.23.3 mysql8

2. 问题描述?

有一张表要进行分表,根据月份分表,那么生成表怎么创建表模型呢

3. 您期望得到的结果?

4. 您实际得到的结果?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

先重写模型的$this->table;分表命名 table_1 ,table_2 ...


protected $suffix = null;

    // 设置表后缀
    public function setSuffix($suffix)
    {
        $this->suffix = $suffix;
        if ($suffix !== null) {
            $this->table = $this->getTable() . '_' . $suffix;
        }
    }

    // 提供一个静态方法设置表后缀
    public static function suffix($suffix)
    {
        $instance = new static;
        $instance->setSuffix($suffix);

        return $instance->newQuery();
    }

    // 创建新的"table_{$suffix}"的模型实例并返回
    public function newInstance($attributes = [], $exists = false)
    {
        $model = parent::newInstance($attributes, $exists);
        $model->setSuffix($this->suffix);

        return $model;
    }

使用

$suffix = "表后缀";
TableModel::suffix($suffix);
$model = new TableModel();
$model->setSuffix($suffix);
$model->tableParam = 1;
$model->save();
2年前 评论
kis龍 2年前
Imuyu 2年前
小猪蹄子 (作者) 2年前
kis龍 2年前
讨论数量: 12

先重写模型的$this->table;分表命名 table_1 ,table_2 ...


protected $suffix = null;

    // 设置表后缀
    public function setSuffix($suffix)
    {
        $this->suffix = $suffix;
        if ($suffix !== null) {
            $this->table = $this->getTable() . '_' . $suffix;
        }
    }

    // 提供一个静态方法设置表后缀
    public static function suffix($suffix)
    {
        $instance = new static;
        $instance->setSuffix($suffix);

        return $instance->newQuery();
    }

    // 创建新的"table_{$suffix}"的模型实例并返回
    public function newInstance($attributes = [], $exists = false)
    {
        $model = parent::newInstance($attributes, $exists);
        $model->setSuffix($this->suffix);

        return $model;
    }

使用

$suffix = "表后缀";
TableModel::suffix($suffix);
$model = new TableModel();
$model->setSuffix($suffix);
$model->tableParam = 1;
$model->save();
2年前 评论
kis龍 2年前
Imuyu 2年前
小猪蹄子 (作者) 2年前
kis龍 2年前

没这么麻烦,重写getTable函数就行

    /**
     * Get the table associated with the model.
     *
     * @return string
     */
    public function getTable()
    {
        return $this->table ?? Str::snake(Str::pluralStudly(class_basename($this)));
    }
2年前 评论
荭尘宝宝 (楼主) 2年前

用中间件解决,这种分表,碰到搜索你就要抓狂了

2年前 评论
荭尘宝宝 (楼主) 2年前
荭尘宝宝 (楼主) 2年前
Imuyu 2年前
Larva (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!