如何删除多个表中的数据 Laravel 8

How to Delete data in Multiple Tables Laravel 8

在我的项目中,我在数据库中有两个表第一个是我的门票 table,其中存储了门票数据。第二个是 gp_group,其中票证 ID 存储在票证 ID 的 gpid 中。见下图:- Tickets table

并且每当我删除一张票时,我都必须从该票的 table 和 gp_group table 两张票中删除票数据。见下图:-gp_group table

现在,我的问题是我无法从 gp_group table 中删除工单数据,但工单 table 数据已删除。

所以,当我删除票时,我在删除函数中使用了一个函数来删除 table 中的数据。但是还是不行。

代码在TicketController

public function destroy(Ticket $ticket)
{
  $ticket =DB::table('tickets')
 -> leftJoin('gp_group','tickets.id', '=','gp_group.ticket_id')
  -> where('tickets.id',$ticket);
  DB::table('gp_group')->where('ticket_id',$ticket)->delete();
  $ticket->delete(); 
  
    return redirect()->route('tickets.index')
                    ->with('success','Group deleted successfully');
}

我收到此错误“class Illuminate\Database\Query\Builder 的对象无法转换为字符串”

并在函数中尝试其他代码

public function destroy(Ticket $ticket)
{ 
  $ticket->delete();
  ticket::where("id", $ticket)->delete();
  gp_group::where("gpid", $ticket)->delete();

    return redirect()->route('tickets.index')
                    ->with('success','Group deleted successfully');
}

但还是不行。

我得到不同的错误

"SQLSTATE[42S02]: Base table or view not found: 1146 Table 'rp1.gp_groups' doesn't exist (SQL: delete from gp_groups where gpid = {"id":63,"gpname":"Nasser","detail":"Nasser","gender":"Male","semester":432,"status":"Not assigned","Assigned":null,"user_id":1,"track_id":5,"created_at":"2021-10-15T18:50:04.000000Z","updated_at":"2021-10-15T18:50:04.000000Z"})"

如果有人能指出我在这里做的错误,我将不胜感激。

为此,您需要在 table 中创建指向 delete on cascade 的外键:

foreign-key-constraints

然后您可以删除父注册表 (tickets table),这样会自动删除在 gp_group table 注册表中引用的所有项目另一个 table.

快速解决您的问题,您只需将 Id 传递给 where 函数 不是整票这样

-> where('tickets.id',$ticket->id);

这里是完整的更新函数

{ 
 $ticket->delete();
 gp_group::where("gpid", $ticket->id)->delete();

return redirect()->route('tickets.index')
                ->with('success','Group deleted successfully');
}

并且您可以考虑该任务的外键,它会在删除票证时自动删除 gp_group 记录
阅读更多相关信息 here

public function destroy(Ticket $ticket)
{
  $ticket =DB::table('tickets')
 -> leftJoin('gp_group','tickets.id', '=','gp_group.ticket_id')
  -> where('tickets.id',$ticket)->first();
}

我认为你缺少添加 first()

所以它只需要一个低值,如果你需要删除多条记录,你可以将它们传递给 roop