我的数据库中有2个表。
首先是桌面帖子
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->date('PostDate');
$table->string('PostTitle', 200);
$table->string('GroupID', 100)->nullable();
$table->integer('LanguageID')->default(1);
$table->timestamps();
});
第二个是table post_categories
Schema::create('post_categories', function (Blueprint $table) {
$table->integer('post_id');
$table->integer('category_id');
$table->timestamps();
});
每次我将后期数据存储到数据库中时,它都会存储为两行..因为我有两种活动语言。在我的post_categories表中,有category_id列..因此,如果id = 1的帖子数据有2个类别...而id = 2的帖子数据有3个类别,它将在post_categories表中创建5行。 但是当我想要删除帖子时,我会先从组ID中检查..所以,我也会删除2行.. 但问题是,我无法删除post_categories中的数据..我使用了foreach但数据不会被删除..
这是我的删除控制器:
public function destroy($id)
{
$post = Post::findOrFail($id);
Post::where('GroupID', $post->GroupID)->delete();
$postGroups = Post::where('GroupID', $post->GroupID)->get();
foreach ($postGroups as $postGroup) {
DB::table('post_categories')->where('post_id', $postGroup->id)->delete();
}
return response()->json([
"error" => "0",
"message" => "Success"
]);
}
我可以删除所有具有相同组ID的帖子,但我无法删除具有相同post_id的post_categories数据。
答案 0 :(得分:2)
您已经选择了答案,但在您的情况下,使用whereIn()
会更好:
$post = Post::findOrFail($id);
$postGroups = Post::where('GroupID', $post->GroupID)->get();
DB::table('post_categories')->whereIn('post_id', $postGroups->pluck('id'))->delete();
Post::where('GroupID', $post->GroupID)->delete();
答案 1 :(得分:1)
删除帖子前删除类别。
public function destroy($id)
{
$post = Post::findOrFail($id);
$postGroups = Post::where('GroupID', $post->GroupID)->get();
foreach ($postGroups as $postGroup) {
DB::table('post_categories')->where('post_id', $postGroup->id)->delete();
}
Post::where('GroupID', $post->GroupID)->delete();
return response()->json([
"error" => "0",
"message" => "Success"
]);
}
为了获得更好的代码体验,我建议使用posts
,posts_categories
和posts_languages
等表结构。最后一个将包含有关多种语言内容的数据,并与posts