SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null

9 浏览
0 Comments

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null

我需要一些帮助...我正在根据教程制作一个标签函数,但是在我的数据库(post_tag)中,只保存了tag_idid,没有保存post_id。在我的posts表中,创建帖子后我会收到帖子的id,但在post_tag中没有。你知道为什么吗...?

我的控制器

public function create(){
        $tags = Tag::all();
        return view('posts.create')->withTags($tags);
    }
public function store(Request $request )
    {
        $data = request()->validate([
            'caption' => 'required|max:255',
            'image' => 'required|image',
        ]);
        $post = new Post;
        $post->tags()->sync($request->tags, false);
        $imagePath = request('image')->store('uploads', 'public');
        $image = Image::make(public_path("storage/{$imagePath}"))->fit(1600, 1100);
        $image->save();
        auth()->user()->posts()->create([
            'caption' => $data['caption'],
            'image' => $imagePath,
        ]);
         return redirect('/profile/' . auth()->user()->id);
    }

我的create_post_tag_table

  public function up()
    {
        Schema::create('post_tag', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('post_id')->unsigned();
            $table->foreign('post_id')->references('id')->on('posts');
            $table->integer('tag_id')->unsigned();
            $table->foreign('tag_id')->references('id')->on('tags');
        });
    }

我的create_posts_table

  public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->string('caption');
            $table->string('image');
            $table->timestamps();
            $table->index('user_id');
        });
    }

0
0 Comments

(SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null) 这个问题的出现是因为在创建新的post时,post_id列的值为空。解决方法是将post_id的值设置为有效的值。

在给定的代码示例中,解决方法是使用auth()->user()->posts()->create()方法创建新的post。在这个方法中,将post的caption和image属性设置为相应的值。通过这个方法,post_id的值会被自动设置为有效的值,从而解决了问题。

下面是正确的解决方案的代码示例:

$post = auth()->user()->posts()->create([
        'caption' => $data['caption'],
        'image' => $imagePath,
    ]);

通过使用上述代码,可以确保在创建新的post时,post_id的值被正确设置,从而避免了出现(SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null)的问题。

0
0 Comments

问题的原因是在创建一个新的Post对象后,还没有将其保存到数据库中。因此,在执行$post->tags()->sync($request->tags, false)这行代码时,数据库中还没有该post的id,因此无法找到id,导致sync操作失败。

解决方法是在创建Post对象后,先调用save()方法将其保存到数据库中,然后再进行sync操作。

另外,还有一个可能会引起其他问题的地方是,post模型的id是一个big int类型,而post_tag表中的post_id只是一个integer类型。这种不匹配可能会导致一些问题。建议将post_tag表中的post_id字段类型改为bigInteger类型,以与post模型的id类型匹配。

解决这个问题的方法是先保存Post对象到数据库中,然后再进行sync操作,并且确保post模型的id类型与post_tag表中的post_id字段类型匹配。

0
0 Comments

我可能错了,但由于您在与外键关联的表中没有onUpdate或onDelete属性,这可能是问题的原因。

这个错误是由于在插入或更新数据时,尝试将空值插入到不允许为空的列中引起的。根据给出的错误消息(SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null),可以确定问题出现在'post_id'列上,该列不允许为空。

解决这个问题的方法是确保在插入或更新数据时,为'post_id'列提供一个非空值。可以通过以下几种方式解决这个问题:

1. 检查数据库中的表定义,确认'post_id'列的定义是否设置为允许空值。如果不允许空值,可以考虑修改表定义,将其设置为允许空值。

2. 在插入或更新数据时,确保为'post_id'列提供一个非空值。可以通过编写合适的SQL查询语句或使用ORM框架的相关方法来实现。

3. 检查关联的外键约束是否正确设置。如果外键约束指定了onUpdate或onDelete属性,并且这些属性不符合需求,可以考虑修改它们或完全删除外键约束。

总之,解决这个问题的关键是确保在插入或更新数据时,为不允许为空的列提供一个非空值。这可以通过修改表定义、提供非空值或调整外键约束来实现。

0