es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

laravel eloquent equivalente de consulta de base de datos para forceDelete

Necesito cambiar mis archivos de migración porque actualmente está utilizando el modelo, pero he leído que no debemos usar modelos dentro de los archivos de migración.

Tengo un código eloquent:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use App\MyModel;

class AddRelationshipIdToMyModel extends Migration
{
    /**
     * Realiza las migraciones.
     *
     * @return void
     */
    public function up()
    {
        MyModel::query()->forceDelete();
        Schema::table('my_model', function (Blueprint $table) {
            $table->foreignId('my_model_id')->constrained();
        });
    }

    /**
     * Revierte las migraciones.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('my_model', function (Blueprint $table) {
            $table->dropForeign(['my_model_id']);
        });
    }
}

Necesito refactorizar esto para no utilizar el modelo ‘MyModel’, pero no conozco el equivalente en la consulta de la base de datos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para refactorizar el archivo de migración y no usar el modelo ‘MyModel’, puedes reemplazar el método de consulta con los métodos del facade DB. Aquí tienes un ejemplo de código refactorizado:

    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Support\Facades\DB;
    
    class AddRelationshipIdToMyModel extends Migration
    {
        /**
         * Ejecuta las migraciones.
         *
         * @return void
         */
        public function up()
        {
            DB::table('my_model')->delete();
            Schema::table('my_model', function (Blueprint $table) {
                $table->foreignId('my_model_id')->constrained();
            });
        }
    
        /**
         * Revierte las migraciones.
         *
         * @return void
         */
        public function down()
        {
            Schema::table('my_model', function (Blueprint $table) {
                $table->dropForeign(['my_model_id']);
            });
        }
    }
    

    En lugar de llamar al método ‘query’ en la clase ‘MyModel’, llamamos al método ‘table’ en el facade DB para realizar operaciones CRUD en la tabla ‘my_model’. Además, en lugar de llamar al método ‘forceDelete’ del modelo, utilizamos el método ‘delete’ en el generador de consultas del facade DB para eliminar filas de la tabla.

    Esto evita el uso de modelos en los archivos de migración, lo cual no es recomendado según las mejores prácticas de Laravel.

Comments are closed.