如何使用 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 或对象数组执行批量删除?的主要内容,如果未能解决你的问题,请参考以下文章