如何在不使用Laravel中的任何关系的情况下删除多个表数据库中的数据

时间:2017-10-18 07:44:06

标签: php laravel

我的数据库中有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数据。

2 个答案:

答案 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"
    ]);

}

为了获得更好的代码体验,我建议使用postsposts_categoriesposts_languages等表结构。最后一个将包含有关多种语言内容的数据,并与posts

相关