Las migraciones de Laravel son una herramienta fantástica. Permiten a todo el equipo tener la misma estructura de la base de datos sin tener que andar compartiendo ficheros sql. Basta con hacer un simple:
$ php artisan migrate
Y ya tenemos la misma estructura que el resto de gente del equipo.
Normalmente las migraciones crean o borran tablas y añaden, editan o eliminan columnas. Pero en algunas ocasiones tenemos que hacer algunas comprobaciones extra. Por ejemplo, comprobar si una columna existe antes de añadirla.
Para esto basta con usar Schema::hasColumn():
public function up()
{
Schema::table('personas', function (Blueprint $table) {
if (!Schema::hasColumn('personas', 'updated_at')) {
$table->timestamp('updated_at');
}
});
}
¿Y por qué puedo necesitar esto?
Es posible que te preguntes en qué escenarios es necesario hacer esta comprobación ya que deberíamos saber si la columna existe o no simplemente con mirar las migraciones.
La verdad es que he tenido que usar esto muy pocas veces. Y han sido normalmente porque:
- Alguien ha modificado la base de datos directamente. Hay a quien le da mucha «pereza» usar migraciones y hacen los cambios en la base de datos directamente sin pensar en los demás.
- Trabajamos con código heredado. Cuando trabajamos en una aplicación «legacy» podemos encontrar todo tipo de sorpresas y me he visto en la necesidad de usar esto e alguna ocasión.