删除最低ID的条目



我只想删除最低ID的行。

我正在尝试:

$query = 'DELETE FROM PATHTOENTITY ORDER BY id ASC LIMIT 1';
$query = $this->entityManager->createQuery($query);
$query->execute();         

并获取此错误:

[语法错误]第0行,col 53:错误:弦的预期末端,获得'by'

也许我正在使用错误的方法。任何建议如何在一个数据库调用中使用最低ID删除条目?

正如Kwido所说,您错过了实体别名。但是查询仍然无法执行。

首先,DQL不支持LIMIT表达式。这是特定于mySQL的功能,不是ANSI SQL。其他平台驱动程序具有自己的这种行为的实现,所有这些行为都由公共接口提供:Query对象的setFirstResult()/setMaxResult()

第二,DQL不支持DELETE使用ORDER BY子句(请参阅Lanagenage EBNF)。它也是非标准功能,但不能为其他驱动程序实现,因此学说不允许。

如果您需要执行此查询,则必须使用本机SQL。

在使用DQL时为您的实体定义一个别名。请参阅:学说 - dql

$query = $this->entityManager->createQuery('SELECT e FROM MyEntity e ORDER BY e.id ASC');
$query->setMaxResults(1); // LIMITS 1
$entities = $query->getResult();
if (count($entities) > 0) {
    $query = $this->entityManager->createQuery('DELETE FROM MyEntity e WHERE e.id = :identifier');
    $query->setParameter("identifier", $entities[0]->getId());
    $query->execute();
}

用您的实体classname的首字母替换Entityalias,这是学说最常见的做法。

//编辑 - @timurib所述DQL不知道限制。应该使用setmaxresults。

//edit2-作为delete语句的订单不支持订单,而仅由where子句。现在,我们使用另一个查询在删除之前返回标识符。请参阅DQL-语句

$query = 'DELETE FROM table ORDER BY id ASC LIMIT 1';
$stmt = $this->entityManager->getConnection()->prepare($query);
$stmt->execute();

您无法从EntityManager删除或更新。首先,您必须从存储库中选择/查找实体,然后将其删除。我的建议适用于RAW SQL查询。

相关内容

  • 没有找到相关文章

最新更新