SQLSTATE [42P01]:未定义表:7错误:关系“类别”不存在第1行:从“类别”中选择* ^(SQL:从“类别”中选择*)

时间:2020-02-19 06:53:37

标签: php laravel postgresql

我昨天刚刚部署在Heroku上,并连接到Postgresql数据库,此后,我在Heroku的屏幕(和终端)上显示了这个有趣的错误:

SQLSTATE [42P01]:未定义表:7错误:关系“类别”不存在第1行:从“类别”中选择* ^(SQL:从“类别”中选择*)

在我的终端中,在此错误下方,我有一个Undefined table错误,指出我的类别表不存在。这太令人沮丧了,因为它确实存在并且就在那!有人可以帮忙吗?有人遇到过类似的问题吗?

尝试:

  • 回滚表:heroku运行php artisan migrate:rollback
  • 迁移新鲜:heroku运行php artisan迁移:新鲜
  • 迁移重置:heroku运行php artisan迁移:重置

迁移将一直进行到该关系所在的故事表为止,然后停止运行。故事正下方是类别表。我不知道这对寻找解决方案有多大帮助。

故事表:

        <?php

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

    class CreateStoriesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('stories', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('title');
                $table->text('story');
                $table->date('published_on');
                $table->integer('count_views')->default(0);
                $table->unsignedBigInteger('user_id');
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
                $table->unsignedBigInteger("category_id");
                $table->foreign('category_id')->references('id')->on('categories')->ondDelete('cascade');
                $table->timestamps();
            });
        }

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

类别表:

    <?php

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

    class CreateCategoriesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('categories', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('category');
                $table->string('title')->nullable();
                $table->string('img')->nullable();
                $table->timestamps();
            });
        }

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

故事模式:

        <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;
    use App\Reviews;
    use App\User;
    use App\Category;
    use App\ReadingList;

    class Story extends Model
    {

        protected $guarded = [];

        public function readingList()
        {
            return $this->belongsTo(ReadingList::class);
        }

        public function category()
        {
            return $this->belongsTo(Category::class);
        }

        public function reviews() {
            return $this->hasMany(Reviews::class);
        }

        public function user() {
            return $this->belongsTo(User::class);
        }

    }

类别模型:

    <?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    use App\Story;

    class Category extends Model
    {
        protected $guarded = [];

        public function story() 
        {
            return $this->hasMany(Story::class);
        }

    }

迷恋了好几天,也许你们看到了我看不到的东西。提前非常感谢您。

4 个答案:

答案 0 :(得分:1)

那是因为您的类别表迁移在故事表之后运行,但是由于外键,故事表取决于类别。您要做的是:

  • 重命名类别表迁移并将其移至故事表迁移的顶部
  • 删除数据库中的所有表
  • 再次运行迁移

答案 1 :(得分:1)

您应该在迁移文件名中更改日期

示例

2019_07_29_113341_create_categories_table
2019_07_30_113341_create_stories_table

最早的日期时间将是第一个运行的时间,

您应该先迁移类别表,然后再迁移故事

希望可以帮助您

答案 2 :(得分:1)

你必须考虑首先应该创建Parent迁移,然后应该建立关系。 首先创建“类别”迁移然后创建“故事”迁移。 我希望它有用..

答案 3 :(得分:0)

在这些情况下,您可以创建一个迁移文件。

SELECT p.id, p.sheet_number, p.transaction_status, 
       SUM(p.total_amount) OVER (PARTITION BY p.transaction_status) AS total 
FROM purchase p 
ORDER BY p.id;