mysqllaravelmigration

Set default empty array in laravel migration


I want to set empty array for column interests. I've added field as json and cast it as array in my model. Below are my code snippets :

/**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('db_invitations', function (Blueprint $table) {
            if(!Schema::hasColumn('db_invitations','interests')){
                $table->json('interests');
            }
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('db_invitations', function (Blueprint $table) {
            if(Schema::hasColumn('db_invitations','interests')){
                $table->dropColumn('interests');
            }
        });
    }

Also in model :

/**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'interests' => 'array'
    ];

So what i need to do to show default [] in interests column ?


Solution

  • The json datatype can not have default values in MySQL. Use the $attributes instead.

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'interests' => 'array',
    ];
    
    protected $attributes = [
        'interests' => [],
    ];