删除 doctrine zend framework 2 中的批量项目
Delete bulk item in doctrine zend framework 2
我想在我的 ZF2 项目中允许 bulk item delete
。
我在用教义
我不知道如何将批量项目传递给删除操作。
如何将所有项目 ID 传递给控制器,以便能够删除?
您可以通过几种不同的方式实现批量删除:
1) 使用 DQL
<?php
$ids = [1, 2, 3, 4];
$query = $em->createQuery('DELETE FROM App\Entity\User u WHERE u.id IN (:ids)');
$query->setParameter('ids', $ids);
$query->execute();
2) 迭代结果
<?php
$ids = [1, 2, 3, 4];
$users = $em->getRepository('App\Entity\User')->findById($ids);
foreach($users as $user) {
$em->remove($user);
}
$em->persist();
3) 批处理
<?php
$batchSize = 20;
$i = 0;
$q = $em->createQuery('SELECT u FROM App\Entity\User u');
$iterableResult = $q->iterate();
while (($row = $iterableResult->next()) !== false) {
$em->remove($row[0]);
if (($i % $batchSize) === 0) {
$em->flush(); // Executes all deletions.
$em->clear(); // Detaches all objects from Doctrine!
}
++$i;
}
$em->flush();
更新
假设我们有以下 uri:&ids[]=1&ids[]=2&ids[]=3
因此,您可以在控制器中获取 ID:
<?php
class UserController extends AbstractActionController
{
public function deleteAction()
{
$query = $this->getRequest()->getQuery();
$users = $em->getRepository('App\Entity\User')->findById($query['ids']);
foreach($users as $user) {
$em->remove($user);
}
$em->persist();
}
}
我想在我的 ZF2 项目中允许 bulk item delete
。
我在用教义
我不知道如何将批量项目传递给删除操作。
如何将所有项目 ID 传递给控制器,以便能够删除?
您可以通过几种不同的方式实现批量删除:
1) 使用 DQL
<?php
$ids = [1, 2, 3, 4];
$query = $em->createQuery('DELETE FROM App\Entity\User u WHERE u.id IN (:ids)');
$query->setParameter('ids', $ids);
$query->execute();
2) 迭代结果
<?php
$ids = [1, 2, 3, 4];
$users = $em->getRepository('App\Entity\User')->findById($ids);
foreach($users as $user) {
$em->remove($user);
}
$em->persist();
3) 批处理
<?php
$batchSize = 20;
$i = 0;
$q = $em->createQuery('SELECT u FROM App\Entity\User u');
$iterableResult = $q->iterate();
while (($row = $iterableResult->next()) !== false) {
$em->remove($row[0]);
if (($i % $batchSize) === 0) {
$em->flush(); // Executes all deletions.
$em->clear(); // Detaches all objects from Doctrine!
}
++$i;
}
$em->flush();
更新
假设我们有以下 uri:&ids[]=1&ids[]=2&ids[]=3 因此,您可以在控制器中获取 ID:
<?php
class UserController extends AbstractActionController
{
public function deleteAction()
{
$query = $this->getRequest()->getQuery();
$users = $em->getRepository('App\Entity\User')->findById($query['ids']);
foreach($users as $user) {
$em->remove($user);
}
$em->persist();
}
}