symfony - $em->remove() symfony2 删除所有行

标签 symfony doctrine-orm

我在从 BD 中删除某些内容时遇到问题。

问题在于,它不仅删除了我查找的对象(使用 findOneBy),还删除了与主体 id 相关的所有对象。

//--- Controller

$new = $this->getDoctrine()->getManager();
$OBJcar = $new->getRepository('SomeOtherBundle:CarEntityClass')
    ->findOneBy(array('idOwner' => $idowner, 'idCar' => $idcar));
if($OBJcar){
  $new->remove($OBJcar);
  $new->flush();
  $msj="The car for an specific owner has been erased.";
}

//---探查器(查询)

"START TRANSACTION"
  Parameters: { }
  Time: 0.22 ms
DELETE FROM schema.CarTable WHERE id_owner = ?
  Parameters: ['123456']
  Time: 0.63 ms
"COMMIT"
  Parameters: { }
  Time: 0.63 ms

如何删除我从数据库中获取的一行?

最佳答案

我否决了上面的答案,因为我厌倦了人们使用字符串 DQL。 它不是标准化的、非面向对象的(即使在后台 dql 与对象一起操作),它不使用查询生成器提供的缓存机制,它不灵活并且看起来不干净。

这是“正确的方法”(恕我直言):

  1. 您为实体添加存储库类
  2. 您可以添加所需的方法以及其中的查询生成器
  3. 您可以在传递特定面向存储库对象的操作所需的参数时调用该方法
  4. 您将获得易于处理的结果

代码如下:

namespace ProjectName\BundleName\Repository;
use Doctrine\ORM\EntityRepository;

class CarRepository extends EntityRepository
{
    public function deleteCarWithOwner($ownerId,$carId)
    {
        $isDeleted = $this->createQueryBuilder("car")
            ->delete()
            ->where('car.id  = :carId')->setParameter("carId", $carId)
            ->andWhere('car.idOwner = :ownerId')->setParameter("ownerId", $ownerId)
            ->getQuery()->execute();

        return $isDeleted;
    }
}

另外,请参阅http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html有关查询构建器的详细信息。使用构建器有很多“优点”,但我认为没有“缺点”。

延迟更新

此外,使用 DQL 时不会调度许多 Doctrine 实体事件。

关于symfony - $em->remove() symfony2 删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17685709/

相关文章:

php - 在 Controller symfony2 中返回 Html

sql - 让 Doctrine 在 INSERT INTO 期间跳过只读字段/列

doctrine-orm - 如何在 Doctrine 2 中使用 readOnly 标志?

php - Doctrine transactions - 计算未决请求的数量

symfony - 教义2 : Cache in One-to-Many associations

symfony - Doctrine 和 Symfony : magic methods and caching

php - 获取 Controller 内的当前 default_target_path

symfony - 多对多关系,orphanRemoval

php - 安装/激活运行 MAMP 的 PHP "intl"扩展

php - Doctrine 插入很多数据