【问题标题】:How to fix "Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column"?如何修复“Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column”?
【发布时间】:2019-06-06 02:17:45
【问题描述】:

我创建了名为project的模型

php artisan make:model 项目

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

运行时在命令行中:

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

它显示了这个错误:

使用消息“SQLSTATE[42S22] 照亮/数据库/查询异常: 未找到列:1054“字段列表”中的未知列“标题”(SQL: 插入projects (title, updated_at, created_at) 值 (我的第一个项目, 2019-01-11 06:46:09, 2019-01-11 06:46:09))'

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

【问题讨论】:

  • 在命令行 tinker 中显示完整代码
  • 请您将模型的代码和迁移添加到您的问题中。
  • @InzamamIdrees 编辑后添加。
  • 请尝试 $project = new App\project; (项目中的小“p”)
  • DESCRIBE 命令得到的结果很奇怪。

标签: php laravel laravel-5


【解决方案1】:

未执行迁移

php artisan make:model project

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

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

php artisan make:migration create_projects_table

你可以看到database/migrations里面,有一个新的文件,名字叫2019_01_11_153037_create_projects_table。时间和日期与你的不同,但主要关注的是'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 Model 的约定,以便 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

【讨论】:

  • 我确实重复了所有步骤并检查了是否没有遗漏任何步骤,但它仍然显示相同的错误。
  • 您是否尝试过创建不同的模型?或者我建议您从数据库中手动创建一个“标题”列,然后再次重做插入步骤。因为从上面的 DESCRIBE 看,title 不见了,这就是我提出迁移解决方案的原因。
  • 运行迁移时是否有任何错误?也许你可以只包括这一列而不是idtimestamp$table->string('title')我会更新答案
【解决方案2】:

你必须试试这个:

 $project = new Project;

 $project->title = $request->title;

 $project->save(); // it will INSERT a new record

更新答案

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

【讨论】:

  • 先生,这正是我写的,仍然给我这个错误。
  • @indiadevelops:请检查您的项目表中有title 字段,并确保您的表名是project
  • 我的表名是projects,它没有title字段。
  • @indiadevelops:哦,这就是问题所在,因为您将值存储在 title 字段中,所以您会出错
  • @indiadevelops:请在您的projects 表中添加title 字段或将值存储在正确的字段中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2018-09-10
  • 2011-03-16
相关资源
最近更新 更多