laravel-create()方法生成的insert查询缺少一列

qyuhtwio  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(347)

我只是想在 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() ,rest与任何普通迁移类相同):

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:insert into posts ( title , post , author , updated_at , created_at )值(测试,部分文本,2,2018-12-05 15:00:33,2018-12-05 15:00:33))◀"
我不明白为什么没有 slug 由laravel生成的insert查询中的列。我花了好几个小时来寻找这个问题,但没有找到任何与之相关的答案,大多数答案都显示了添加到 $fillable 作为解决办法,但我已经有了。
在我的数据库里 posts 是否包含 slug 列。当我跑的时候,它也会在tinker上显示出来 \Schema::getColumnListing('posts'); .
或许有帮助:我添加了 slug 列之后的迁移类,在此之前,一切都很正常。我确实跑了 migrate:fresh 将列添加到迁移类后的命令;当然到现在为止我已经试过了 migrate:rollback 然后 migrate , migrate:refresh 等。。。但什么都不管用。
你知道为什么不包括 slug 插入查询中的列?

gmxoilav

gmxoilav1#

如果已经在模型的filleble属性中添加了“slug”,那么表单中的数据不包含属性“slug”。您可以使用以下方法在控制器中转储请求:

public function smtg(Request $request){
 dd($request);
}
waxmsbnn

waxmsbnn2#

这个问题已经有几个月了,但我只是面对同样的问题,在一个完全不同的地方找到了解决方法:一个陷阱是,如果你设置了一个

public function setSlugAttribute($value) {}

在你的模型里(请注意,该函数是用camelcase编写的,即使属性是用camelcase编写的。)如果您没有将此函数中的任何内容设置为

$this->attributes['slug'] =***;

实际上没有为示例设置任何内容,并且此字段不会添加到由 Post::create() 功能。
也许这对将来的人有帮助!

l2osamch

l2osamch3#

回滚迁移,再次迁移。
然后将此更改为您的模型:

protected $fillable = [
    'title', 'post', 'author', 'slug', 'tags', 'pics'
];

相关问题