而不是使用
逐个删除我的实体$this->em->remove($price);
我想执行本机SQL查询来删除我的所有实体。
以下是我尝试的内容:
$sqlQuery = "delete from mytable where mytable.fieldone_id = ".$fieldoneid." and mytable.fieldtwo_id = ".$fieldtwoid.";";
$query = $this->getEntityManager()->createNativeQuery($sqlQuery);
$query->execute();
返回以下错误:
Catchable fatal error: Argument 2 passed to Doctrine\ORM\EntityManager::createNativeQuery() must be an instance of Doctrine\ORM\Query\ResultSetMapping, none given
它要我传递ResultSetMapping
,但它是删除查询...
有人可以教我怎么做吗?
答案 0 :(得分:19)
在我看来,我使用一种更简单的执行本机SQL查询的方式。尝试这样的事情(我也在使用PDO方法在查询中包含变量,这样更安全):
$sql = "delete from mytable where mytable.fieldone_id = :fieldoneid and mytable.fieldtwo_id = :fieldtwoid";
$params = array('fieldoneid'=>$fieldoneid, 'fieldtwoid'=>$fieldtwoid);
$em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute($params);
// if you are doing a select query, fetch the results like this:
// $result = $stmt->fetchAll();
这对我很有用,希望有所帮助
答案 1 :(得分:3)
根据Doctrine 2 Native SQL documentation page:
如果要执行DELETE,UPDATE或INSERT语句,则无法使用Native SQL API,并且可能会抛出错误。
您可以改为使用DQL查询。
$query = $em->createQuery("DELETE FROM YourNamespace\YourBundle\Entity\YourEntity e WHERE e.fieldone_id = " .$fieldoneid . " AND e.fieldtwo_id = " . $fieldtwoid);
$query->execute();
答案 2 :(得分:0)
如果要在学说中使用本机方式,则可以在实体存储库中使用:
public function deleteUserNative(User $user): void
{
$this->getEntityManager()->getConnection()->delete('user', array('id' => $user->getId()));
}
只需在您的控制器中调用它即可:
$em->getRepository(User::class)->deleteUserNative($user);
此致