未定义的表:7 错误:关系“费用";不存在

2021-12-26 00:00:00 postgresql php laravel eloquent

因为我会说西班牙语,所以我用西班牙语写了收入和支出的控制器和模型;而其余的都是英文的..我手动重命名和更改了路由、控制器、迁移甚至模型.当我运行 php artisan migrate:reset 这是我的错误.

Since i am a spanish speaker, i wrote the controllers and models of income and expense in spanish; while all the rest were on english.. I renamed and changed manually Routes, Controllers, Migrations and even Models. And when i run php artisan migrate:reset this is my error.

未定义表:7 错误:关系费用"不存在(SQL:更改表费用"删除列location_id")**

Undefined table: 7 ERROR: relation "expenses" does not exist (SQL: alter table "expenses" drop column "location_id")**

我使用 psgql 和 laravel 5.3

I use psgql and laravel 5.3

这是我的代码:

    <?php

    namespace App;

    use IlluminateDatabaseEloquentModel;

    class Expense extends Model
    {

        protected $fillable = ['id', 'description', 'quantity'];


        public function locations()
        {

            return $this->hasMany('AppLocation');

        }
        public function icons()
        {

            return $this->hasMany('AppIcon');
        }
        public function types()
        {

            return $this->hasMany('AppType');
        }
        public function stores()
        {

            return $this->hasMany('AppStore');
        }

    }

迁移:

    <?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateExpensesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('expenses', function (Blueprint $table) {
            $table->increments('id');
            $table->float('quantity');
            $table->string('description');
            $table->integer('location_id')->unsigned();
            $table->integer('icon_id')->unsigned();
            $table->integer('type_id')->unsigned();
            $table->integer('store_id')->unsigned();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('expenses');
    }
}

位置迁移:

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateLocationsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('locations', function (Blueprint $table) {
            $table->increments('id');
            $table->string('address');
            $table->float('lat');
            $table->float('long');
            $table->integer('store_id')->unsigned();
            $table->timestamps();

            $table->foreign('store_id')->references('id')->on('stores')->onDelete('cascade');
        });

        Schema::table('expenses', function (Blueprint $table) {
            $table->foreign('location_id')->references('id')->on('locations')->onDelete('cascade');
        });
    }

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

        Schema::dropIfExists('locations');
    }
}

型号:

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Location extends Model
{

    protected $fillable = ['id', 'address', 'lat', 'long'];


    public function expenses()
    {

        return $this->belongsTo('AppExpense');
    }

    public function stores()
    {

        return $this->hasOne('AppStore');
    }
}

希望你能帮助我.

推荐答案

当它说

relation "expenses" does not exist

通常发生在您的费用表必须在 migration:reset 回滚 CreateLocationsTable 之前被删除时.

It usually happens when your expenses table must have been dropped before migration:reset rolled back CreateLocationsTable.

检查迁移的执行顺序.

当您尝试重置时,现在要修复它,请打开您的数据库,手动删除所有表并再次执行 migrate.

As you were trying to reset, to fix it now, open your database, drop all tables manually and execute migrate again.

相关文章