【发布时间】:2019-05-07 05:44:00
【问题描述】:
我正在尝试使用简单的表格在posts 表中简单地插入一行,这是我的store() 插入新行的方法:
//FILE: PostsController.php
public function store(Request $request)
{
//Using hard-coded values instead of actual form data, just to test
Post::create([
'title' => "test",
'post' => "some text",
'author' => "2",
'slug' => "slug-value"
]);
return redirect('/posts');
}
这是我的帖子模型类:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = [
'title', 'post', 'author', 'slug'
];
}
以下是我的迁移类(只显示public function up(),其余与任何普通迁移类相同):
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->longtext('post');
$table->integer('author');
$table->string('slug');
$table->string('tags')->nullable();
$table->string('pics')->nullable();
$table->timestamps();
});
}
问题:在提交表单时(即在控制器中调用store() 方法),它给出以下错误:
"SQLSTATE[HY000]: 一般错误: 1364 字段 'slug' 没有默认值 (SQL: 插入
posts(title,post,author,updated_at, @ 987654333@) values (test, some text, 2, 2018-12-05 15:00:33, 2018-12-05 15:00:33)) ◀"
我不明白为什么laravel生成的插入查询中没有slug列。我花了几个小时搜索这个,但甚至没有任何与之相关的答案,其中大多数显示添加到 $fillable 作为解决方案,但我已经有了。
在我的数据库中,表 posts 包含 slug 列。当我运行 \Schema::getColumnListing('posts'); 时,它也会在 tinker 上显示。
可能有帮助:我稍后将 slug 列添加到迁移类中,在此之前一切正常。在将列添加到迁移类后,我确实运行了migrate:fresh 命令;当然,到目前为止,我已经尝试了所有 migrate:rollback,然后是 migrate、migrate:refresh 等等……但没有任何效果。
知道为什么插入查询中不包含slug 列吗?
【问题讨论】:
-
可以先清除缓存吗?
-
我确实清理了缓存,没有运气:(
-
您好 Echoes,您的错误 SQL 语句与控制器中的硬编码值不匹配。那是因为您复制粘贴了一个旧示例吗?还是有什么东西卡在某个地方的队列中?我有时会在调试时将其注入我的 AppServiceProvider 以详细查看所有查询:
DB::listen(function ($query) { Log::debug("[sql] [query] " . $query->sql); Log::debug("[sql] [bindings] " . print_r($query->bindings, true)); }); -
啊,是的,我复制粘贴了旧示例,我的错,我将对其进行编辑。
-
您是否尝试过使用另一种创建方法来查看是否可行,以及批量分配是否存在问题或 SQL 是否在某处出现问题?例如。
$post = new Post; $post->title = "title"; $post->slug = "test-slug"; $post->save();