数据库中的列为空

时间:2019-07-16 19:39:18

标签: php database laravel

我需要知道如何在表格post_tag的列post_id中保存帖子的ID?现在,当我添加新帖子时,表格中仅保存{{1 }},您能帮我些帮助吗?我正在看一个教程,但仍然遇到这个问题。谢谢。

create_post_tag_table

tag_id

具有函数存储的PostsController

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostTagTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('post_tag', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('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_tags_table

 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_posts_table

  public function up()
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->timestamps();
        });
    }

现在,在 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'); }); } $post = new Post;这行中,我的标签ID被保存在$post->tags()->sync($request->tags, false);列中,但我在表tag_id中的新帖子ID却没有。我将帖子ID保存在posts表中了吗?

4 个答案:

答案 0 :(得分:1)

您要创建两个不同的Post对象。

$post = new Post;

$post->tags()->sync($request->tags, false);

auth()->user()->posts()->create([ // this creates another one
    'caption' => $data['caption'],
    'image' => $imagePath,
]);

对您要实现的目标一无所知。我认为您可以通过创建新逻辑,而不是将新逻辑保存到用户中来获得所需的逻辑。 (通常,我认为$ request-> user()是使用户退出的更好方法)。您还需要将这些字段添加到第一个post对象。

$post = new Post([
    'caption' => $data['caption'],
    'image' => $imagePath,
]);

//code in between should still be there

$request->user()->posts()->save($post);

答案 1 :(得分:1)

创建模型对象时,将完成post和标记之间的同步。此时,它实际上是将ID为null的模型与现有的tag-id进行同步,从而导致post_id在数据库中为空。

保存模型后执行$post->tags()->sync($request->tags, false);即可。

答案 2 :(得分:1)

首先创建您的帖子

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

然后分配标签

$post->tags()->sync($request->tags, false);

另外,您可以尝试将tags()-> sync()与post()-> create()方法链接起来,但我尚未进行测试。

答案 3 :(得分:0)

是否尝试过使用链接到迁移文件的OnUpdate和onDelete方法?