我想在Doctrine中删除一条记录,但我不知道它为什么不删除。在Doctrine中删除记录
这里是我的代码:
function del_user($id)
{
$single_user = $entityManager->find('Users', $id);
$entityManager->remove($single_user);
$entityManager->flush();
}
加:我怎样才能呼应查询,看看有什么会在这里?
我想在Doctrine中删除一条记录,但我不知道它为什么不删除。在Doctrine中删除记录
这里是我的代码:
function del_user($id)
{
$single_user = $entityManager->find('Users', $id);
$entityManager->remove($single_user);
$entityManager->flush();
}
加:我怎样才能呼应查询,看看有什么会在这里?
尝试$single_user
的var_dump()
。如果它是“null
”,它不存在?
还要检查“用户”是否是一个有效的实体名称(没有命名空间?),$ id是否引用用户的PK?
如果你想看到正在执行的查询检查你的mysql/SQL/...登录或可考虑学说\DBAL\Logging\EchoSQLLogger
您首先需要存储库。
$entityManager->getRepository('Users')->find($id);
代替
$single_user = $entityManager->find('Users', $id);
'用户' 字符串是用户的名称学说(取决于如果您使用的Symfony,Zend公司。等)存储库。
这个问题有* symfony2 *标签,你为什么提到Zend? –
因为是错误的陈述这是一个symfony2问题,这是一个学说问题 – ROLO
你是否检查你的实体作为好评注释?
cascade={"persist", "remove"}, orphanRemoval=true
首先,您可能需要检查'用户'是否是您的完全合格类名。如果不检查,并使用名称空间信息将其更新到您的类名称。
确保find()返回的对象不为null或不为false,并且在调用EM的remove()之前是实体类的实例。
关于你的其他问题,而不是使学说返回SQL的我只是使用我的数据库(MySQL)来记录所有查询(因为它只是开发环境)。
这是一个古老的问题,目前似乎还没有答案。作为参考,我将在此留下更多参考。你也可以检查doctrine documentation
要删除记录,你需要(假设你是在你的控制器):
// get EntityManager
$em = $this->getDoctrine()->getManager();
// Get a reference to the entity (will not generate a query)
$user = $em->getReference('ProjectBundle:User', $id);
// OR you can get the entity itself (will generate a query)
// $user = $em->getRepository('ProjectBundle:User')->find($id);
// Remove it and flush
$em->remove($user);
$em->flush();
使用得到一个reference的第一种方法通常是更好,如果你只是想首先删除实体,而不先检查它是否存在,因为它不会查询数据库,只会创建可用于删除实体的代理对象。
如果你想确保这个ID首先对应于一个有效的实体,那么第二种方法更好,因为它会在试图删除它之前为你的实体查询数据库。
问题..这个问题2找到一个SQL命令,一个删除。那是件好事儿吗? – Dennis
@丹尼斯这取决于你的需求。我更新了我的答案以涵盖您的问题。谢谢。 –
在Silex的路线我不喜欢这样,在情况下,它可以帮助别人:
$app->get('/db/order/delete', function (Request $request) use ($app) {
...
$id = $request->query->get('id');
$em = $app['orm.em']; //or wherever your EntityManager is
$order = $em->find("\App\Entity\Orders",$id); //your Entity
if($order){
try{
$em->remove($order);
$em->flush();
}
catch(Exception $e)
{
return new Response($e->getMessage(), 500);
}
return new Response("Success deleting order " . $order->getId(), 200);
}else{
return new Response("Order Not Found", 500);
}
}
它应该是这样的'$实体= $ EM-> getRepository( 'ProjectYourBundle:用户') - >查找( $ id);'? –
你缺少'getRepository' –