How to implement partition in laravel database migration

前端 未结 2 812
轻奢々
轻奢々 2021-01-07 09:32

Using Laravel 5.3 how can I implement partition. Following is the mysql table structure I\'m trying to add in migration.

CREATE TABLE `settings` (
    `id` I         


        
相关标签:
2条回答
  • 2021-01-07 09:39

    I think it is help to you,

          Schema::create('settings', function(Blueprint $table) {
             $table-> increments('id');
             $table->integer('client_id')->primary();
             $table->string('key');
             $table->text('value');
             $table->timestamps();
    
             $table->unique(['client_id', 'key']);
           });         
    

    or

          Schema::create('settings', function(Blueprint $table) {
             $table-> increments('id');
             $table->integer('client_id');
             $table->string('key');
             $table->text('value');
             $table->timestamps();
    
             $table->primary('client_id');
             $table->unique(['client_id', 'key']);
           });         
    

    I searched everywhere, i can't solution find for partition.
    But,

    My suggestion use, below unprepared into the migration file functions of up and down function

    DB::unprepared()   
    

    in migration to run your SQL query with partition.

    like,

    DB::unprepared('create table....')
    
    0 讨论(0)
  • 2021-01-07 09:43

    There's now a Composer package for this called brokenice/laravel-mysql-partition:

    https://packagist.org/packages/brokenice

    Here's a sample right from the docs:

    // You use their extended Schema class:
    use Brokenice\LaravelMysqlPartition\Schema\Schema;
    // You might also need this (I didn't need it for partitioning by hash):
    use Brokenice\LaravelMysqlPartition\Models\Partition;
    
    // I omitted class and method definition boilerplate...
    
    // Create a table as you would normally:
    Schema::create('partitioned', static function (Blueprint $table) {
        // ...
    });
        
    // Now partition it (it will run an ALTER TABLE query):
    Schema::partitionByList(
        'partitioned', 
        'id',
        [
            new Partition('server_east', Partition::LIST_TYPE, [1,43,65,12,56,73]),
            new Partition('server_west', Partition::LIST_TYPE, [534,6422,196,956,22])
        ]
    );
    
    
    0 讨论(0)
提交回复
热议问题