Skip to content
Advertisement

Separate table for each year in Laravel

How can implement tables based on year in Laravel, like Orders2020, Orders2019, Orders2018 etc. And how to switch between?

Advertisement

Answer

I have a model with huge datas, and every month it will generate nearly 10 million+ records, so I split its table horizon too.

The solution is like this below,

In your Order model:

use IlluminateSupportCarbon;

class Order extends Model
{
    protected $table = '';
    public function __construct($year='')
    {
        parent::__construct();

        if (empty($year)) {
            $tablename = 'orders'.Carbon::now()->year;
        } else {
            $tablename = 'orders'.$year;
        }
        $this->setTable($tablename);
    }
}

So you can get the table you want:

$orders2018 = new Order('2018');
$orders2018->where(...)->get();

$orders = Order::where(...)->get(); // will search from the table this year.
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement