我需要一些帮助...正在为带有教程的标签创建函数,但是在我的数据库(post_tag
)中,我的post_id
没有保存,只有{{ 1}}和tag_id
。在我的id
表中,创建帖子后,我收到了posts
个帖子,但是在这里,我的id
不是。您知道为什么男人...吗?
我的控制器
post_tag
我的create_post_tag_table
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_posts_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');
});
}
答案 0 :(得分:0)
我可能是错的,但是由于您的表中没有与外键关联的onUpdate或onDelete属性,因此可能是问题所在。
答案 1 :(得分:0)
您已经创建了一个新的 Post 对象,但是尚未在此行中保存它:
$post = new Post;
因此,在此行中紧随其后:
$post->tags()->sync($request->tags, false);
该信息的数据库中目前尚没有id
(在 Post 模型中也没有id
),因此每次同步都会失败,因为它找不到id
。
新建 Post 对象后,save()
,然后即可进行同步。
在另一个可能会以其他方式有所帮助的注释上,您的帖子模型与id
有很大的区别:
Schema::create('posts', function (Blueprint $table) {
$table->bigIncrements('id');
}
但是您的post_tag表只是一个整数。这种不匹配可能会导致一些问题。建议更改以匹配:
Schema::create('post_tag', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('post_id')->unsigned(); // <--- suggest change this to bigInteger
$table->foreign('post_id')->references('id')->on('posts');
答案 2 :(得分:0)
正确的解决方法是:
$post = auth()->user()->posts()->create([
'caption' => $data['caption'],
'image' => $imagePath,
]);
我刚刚将其添加到我的代码中,一切正常。