Creé una tabla usando migración como:

 Schema::create('listings', function (Blueprint $table) {
        $table->increments('id');
        $table->decimal('original_price', 10, 2);
        $table->decimal('discouted_price', 10, 2);

        $table->integer('city_id')->index()->unsigned()->nullable();
        $table->foreign('city_id')->references('id')->on('cities');

        $table->integer('destination_city_id')->unsigned()->index();
        $table->foreign('destination_city_id')->references('id')->on('cities');

        $table->string('url');
        $table->string('titile');
        $table->text('description')->nullable();
        $table->dateTime('expires_at');
        $table->integer('clicks')->default('0');
        $table->integer('views')->default('0');
        $table->timestamps();
        $table->softDeletes();
    });

Ahora quiero eliminar estas dos columnas de ('listados').

$table->integer('city_id')->index()->unsigned()->nullable();
        $table->foreign('city_id')->references('id')->on('cities');

        $table->integer('destination_city_id')->unsigned()->index();
        $table->foreign('destination_city_id')->references('id')->on('cities');

Pero alguien puede escribir esta nueva migración, ¿cómo debe buscar eliminar en estas dos columnas?

4
Aleksandur Atanasov 7 mar. 2017 a las 13:43

2 respuestas

La mejor respuesta

La función para hasColumn en Laravel Schema Builder en L5.8 es la siguiente:

\vendor\laravel\framework\src\Illuminate\Database\Schema\Builder::hasColumn($table,$column)
{
 return in_array(
 strtolower($column), array_map('strtolower',$this->getColumnListing($table)));

Así que deberías usar el nombre de tu tabla como primer parámetro, así

public function up() {

 if(Schema::hasColumn('listings','city_id')) {

    Schema::table('listings',function (Blueprint $table) {

      $table->dropColumn('city_id');

    });

  }

}

Repita para cada columna que desee soltar

4
Bruce Tong 17 may. 2019 a las 12:10

Puedes hacer así,

if (Schema::hasColumn('city_id', 'destination_city_id'))
{      
       $table->dropForeign('city_id');
       $table->dropForeign('destination_city_id');
       $table->dropColumn(['city_id', 'destination_city_id']);
}

Siempre es mejor verificar si existe una columna relevante en la tabla.

Pruébalo, esto debería funcionar.

4
Rahul 7 mar. 2017 a las 11:07