如何使用 queryBuilder 从数据库中删除?
•浏览 1
How to delete from database with queryBuilder?
我想删除一些数据并返回删除的编号。
这是我的代码:
public function deleteMyData() : ?int
{
$qb = $this->connection->createQueryBuilder()
->delete('myTable')
->where('pays ="us"')
;
return $qb->execute()->rowCount();
}
->delete()
->from('myTable')
->where('pays ="fr"')
public function deleteMyData() : ?int
{
$qb = $this->connection
->delete('myTable', ['pays' => '"us"'])
;
return $qb;
}
return $qb->execute();
$qb = $this->createQueryBuilder();
//query
$count = $qb->getQuery()->getSingleScalarResult();
我已经测试了其他的东西,比如:
public function deleteMyData() : ?int
{
$qb = $this->connection->createQueryBuilder()
->delete('myTable')
->where('pays ="us"')
;
return $qb->execute()->rowCount();
}
->delete()
->from('myTable')
->where('pays ="fr"')
public function deleteMyData() : ?int
{
$qb = $this->connection
->delete('myTable', ['pays' => '"us"'])
;
return $qb;
}
return $qb->execute();
$qb = $this->createQueryBuilder();
//query
$count = $qb->getQuery()->getSingleScalarResult();
当我运行我的代码时,我遇到了这个错误:
[Symfony\\Component\\Debug\\Exception\\FatalThrowableError]
Call to a member function rowCount() on integer
我转储了 $qb->execute()->rowCount(),它返回 "0"。
感谢您的帮助!
PS:我认为问题不在于查询,因为:
Error An exception occurred while executing 'DELETE FROM theQueryTest WHERE pays ="us"':
SQL 很棒
PS 2:我不能使用 ->getQuery()
我找到了解决方案
就我而言,我必须使用 $this->connection 但是我不必使用 $qb->execute()
我阅读了文档并在 Connection.php (->delete(...)) 中找到了这个:
- @return integer The number of affected rows.
所以我要直接使用$this->connection->delete(...)
public function deleteMyData() : ?int
{
$qb = $this->connection->createQueryBuilder()
->delete('myTable')
->where('pays ="us"')
;
return $qb->execute()->rowCount();
}
->delete()
->from('myTable')
->where('pays ="fr"')
public function deleteMyData() : ?int
{
$qb = $this->connection
->delete('myTable', ['pays' => '"us"'])
;
return $qb;
}
return $qb->execute();
$qb = $this->createQueryBuilder();
//query
$count = $qb->getQuery()->getSingleScalarResult();
此代码返回一个整数
public function deleteMyData() : ?int
{
$qb = $this->connection->createQueryBuilder()
->delete('myTable')
->where('pays ="us"')
;
return $qb->execute()->rowCount();
}
->delete()
->from('myTable')
->where('pays ="fr"')
public function deleteMyData() : ?int
{
$qb = $this->connection
->delete('myTable', ['pays' => '"us"'])
;
return $qb;
}
return $qb->execute();
$qb = $this->createQueryBuilder();
//query
$count = $qb->getQuery()->getSingleScalarResult();
如果你想计算受影响的行数试试这个:
public function deleteMyData() : ?int
{
$qb = $this->connection->createQueryBuilder()
->delete('myTable')
->where('pays ="us"')
;
return $qb->execute()->rowCount();
}
->delete()
->from('myTable')
->where('pays ="fr"')
public function deleteMyData() : ?int
{
$qb = $this->connection
->delete('myTable', ['pays' => '"us"'])
;
return $qb;
}
return $qb->execute();
$qb = $this->createQueryBuilder();
//query
$count = $qb->getQuery()->getSingleScalarResult();