【问题标题】:How to Delete data in Multiple Tables Laravel 8如何删除多个表中的数据 Laravel 8
【发布时间】:2021-12-07 13:40:21
【问题描述】:

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

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

现在,我的问题是我无法从 gp_group 表中删除票证数据,但票证表数据已被删除。

所以,我在删除工单时使用了删除函数中的一个函数从两个表中删除数据。但还是不行。

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');
}

我收到此错误“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]: 未找到基表或视图:1146 表 'rp1.gp_groups' 不存在(SQL:从gp_groups 删除 gpid = {"id":63,"gpname":"Nasser","detail":"Nasser","gender":"Male","semester":432,"status":"不是 已分配","已分配":null,"user_id":1,"track_id":5,"created_at":"2021-10-15T18:50:04.000000Z","updated_at":"2021-10-15T18:50 :04.000000Z"})"

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

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    快速解决您的问题,您只需将 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

    【讨论】:

    • 我试图在这两个表之间创建一个外键但我遇到了一个错误,即(在 gpid 上创建外键时出错(检查数据类型))。表中的两种数据类型都为 id 其整数。
    • 是的,您需要将gb_group 表的架构中的gbid 更改为unsignedBigInteger()。抱歉回复晚了
    【解决方案2】:

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

    foreign-key-constraints

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

    【讨论】:

      【解决方案3】:
      public function destroy(Ticket $ticket)
      {
        $ticket =DB::table('tickets')
       -> leftJoin('gp_group','tickets.id', '=','gp_group.ticket_id')
        -> where('tickets.id',$ticket)->first();
      }
      

      我认为您缺少添加 first()

      所以它只需要一个低点,如果你需要删除多条记录,你可以循环传递它们

      【讨论】:

      • 它只是返回''组已成功删除''而不从两个表中删除
      猜你喜欢
      • 2021-11-24
      • 2021-10-22
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多