首页 > 解决方案 > 如何修复“Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column”?

问题描述

我创建了名称为的模型project

php artisan make:model 项目

然后使用php artisan tinker尝试向其中添加记录。

在我运行时的命令行中:

$project = new App\project;
$project->title='My first project';
 $project->save();

它显示了这个错误:

Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'title' in 'field list' (SQL: insert into projects( title, updated_at, created_at) values (我的第一个项目, 2019-01-11 06: 46:09, 2019-01-11 06:46:09))'

它不执行$project->save();并给出此错误。请帮忙。

标签: phplaravellaravel-5

解决方案


未执行迁移

php artisan make:model project

这是我认为您没有创建迁移文件的错误(请参阅Future Reference下面我为什么这么说的部分),因为错误表明未找到该列。

为了更好地解决这个问题,我建议您创建一个迁移文件,如下所示:

php artisan make:migration create_projects_table

你可以看到里面database/migrations,有一个新的文件,名字2019_01_11_153037_create_projects_table是something。时间和日期与您的不同,但主要关注的是“create_projects_table”

在迁移文件中,您可以看到其中的up()功能。复制此代码

public function up()
    {
        Schema::create('projects', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->timestamps();
        });
    }
}

最后,执行迁移,您应该会看到迁移成功的消息。

php artisan migrate

以后的参考

将来,为了节省时间,您可以将模型与其迁移一起创建,如下所示:

php artisan make:model Project -m

请注意-m标签,它会为您创建一个迁移文件。之后,继续编辑迁移文件(例如,添加列,如前所述)。

在此处了解有关 Laravel 迁移的更多信息:https ://laravel.com/docs/5.7/migrations

另外一点,请查看 Laravel 关于 Eloquent 模型的约定,以便 Laravel 可以发挥它的魔力: https ://laravel.com/docs/5.7/eloquent#eloquent-model-conventions

你的project模型应该是正确的Project

编辑

如果您之前以某种方式执行过迁移,请运行不同的迁移(迁移的数量没有限制)。

php artisan make:migration add_column_title_to_projects_table

并且创建了一个新的迁移文件。在up()函数内部,添加以下代码:

public function up()
{
    Schema::table('projects', function (Blueprint $table) {
        $table->string('title');
    });
}

最后,执行php artisan migrate


推荐阅读