如何使用 Laravel 4.1 基于 id 或对象数组执行批量删除?

Posted

技术标签:

【中文标题】如何使用 Laravel 4.1 基于 id 或对象数组执行批量删除?【英文标题】:How do I perform a Mass delete using Laravel 4.1, based on array of ids or objects? 【发布时间】:2014-06-30 17:40:21 【问题描述】:

我只是想知道这是否可能。

我知道当您要插入多行时,您可以构建一个数组并执行以下操作:

DB::table('some_table')->insert($array);

但据我所知,似乎不可能执行相同的删除操作,我想知道是否有人知道类似的方法:

DB::table('some_table')->delete($array);

【问题讨论】:

这可能有帮助吗? ***.com/questions/21747529/… 实际上,我已经这样做了。这很容易,因为在这种情况下,您只需删除一个属性等于特定值的每条记录。就我而言,在某些情况下,我需要构建一个具有三个不同属性的数组,并且每个属性可能采用不同的值... 说.. $array=array(array('1'=>1, '2'=>2, '3'=>3), array('1'=>4, ' 2'=>5, '3'=>6), 数组('1'=>7, '2'=>8, '3'=>9), 数组('1'=>0, '2' =>1, '3'=>2));我要避免的是将删除查询放在 foreach 循环中。 也许使用 SQLFiddle 中的语法类型,如果我构建一个只有值而没有键的数组,我可以执行以下操作:DB::table('some_table')->whereIn ('attr1, attr2, attr3', $array)->delete(); 很遗憾我对 Laravel 还不熟悉,所以不能多说:/ 【参考方案1】:

Laravel 4.1 中删除记录的多种方式

1) 当您想从数据库中删除记录时,只需调用 delete 方法即可:

$affected = DB::table('users')->where('id', '=', 1)->delete();

2) 想通过 ID 快速删除记录?没问题。只需将 ID 传递给 delete 方法即可:

$affected = DB::table('users')->delete(1);

3) 如果您想一次按 id 删除多条记录,请将它们的 id 传递到数组中 - 使用以下

$users_to_delete = array(1, 2, 3);
DB::table('users')->whereIn('id', $users_to_delete)->delete(); 

4) 如果你想通过 id 一次删除多条记录,传递一个用户数组 - 使用下面的

        //(case A) User fields indexed by number 0,1,2..
        $users_to_delete = array(
           '0'=> array('1','Frank','Smith','Whatever'), 
           '1'=> array('5','John','Johnson','Whateverelse'),
        );

        $ids_to_delete = array_map(function($item) return $item[0]; , $users_to_delete);

        DB::table('users')->whereIn('id', $ids_to_delete)->delete(); 

        //(case B) User fields indexed by key
        $users_to_delete = array(
           '0'=> array('id'=>'1','name'=>'Frank','surname'=>'Smith','title'=>'Whatever'), 
           '1'=> array('id'=>'5','name'=>'John','surname'=>'Johnson','title'=>'Whateverelse'),
        );

        $ids_to_delete = array_map(function($item) return $item['id']; , $users_to_delete);

        DB::table('users')->whereIn('id', $ids_to_delete)->delete(); 

5) 按键删除现有模型

User::destroy(1);
User::destroy(array(1, 2, 3));
User::destroy(1, 2, 3);

6) 当然,您也可以对一组模型运行删除查询:

$affectedRows = User::where('votes', '>', 100)->delete();

【讨论】:

如果我需要从多个表中删除任何帮助怎么办

以上是关于如何使用 Laravel 4.1 基于 id 或对象数组执行批量删除?的主要内容,如果未能解决你的问题,请参考以下文章

在特定的其他列之前或之后添加 sql 表列 - 通过 Laravel 4.1 中的迁移

如何使用 laravel 基于用户从数据库中获取结果

雄辩的关系 laravel

Laravel 4.1 比 4.0 慢 10 倍

升级到 Laravel 4.1 报错

Laravel 4.1 会话变量被随机遗忘