2015-03-31 62 views
0

首先请原谅更多糟糕的代码,我对PHP/Symfony/Doctrine比较陌生。用Symfony&Doctrine更新最后一个数据库条目

我试图用下面的代码实现如下,我需要更新最后一个数据库条目的'Notification_ID'字段。现在,代码的上半部分是检索最后一个数据库条目的ID,然后我可以使用代码的后半部分引用该数据,然后将通知ID(通过POST进入)添加到该数据库条目。

$em = $this->getDoctrine()->getManager(); 
    $query = $em->createQuery(
     'SELECT z.id 
     FROM AppBundle:ZeusUsers z 
     ORDER BY z.id DESC'); 
    $query->setMaxResults(1); 
    $id = $query->getSingleScalarResult(); 

    $notificationid = $this->getRequest()->get("notification_id"); 

    $query = $em->createQuery(
     'UPDATE AppBundle:ZeusUsers z 
     SET z.notification_id = $notificationid 
     WHERE z.id = $id'); 
    $query->execute(); 

    $em->flush(); 

    return new Response("", 200, array("content-type"=>"text/html")); 

CODE修订以上

这是现在返回以下错误:

[Syntax Error] line 0, col 57: Error: Expected Literal, got '$' (500 Internal Server Error) 

这似乎与它有参考上查询外变量的问题,任何想法?

我该如何做本地Symfony中的第二个查询,而不是使用像我这样的查询函数?

+0

这一切都在同一行动?请发布完整的代码。在我看来,每次你执行'$ em = $ this-> getDoctrine() - > getManager();'你将得到一个新的实体管理器实例,并且将消除你所做的更改。如果你在同一个动作中这样做,你只需要让经理做一次。 – 2015-03-31 18:45:21

+0

这是整个行动。 – 2015-03-31 18:46:23

+0

只保留顶部'$ em = $ this-> getDoctrine() - > getManager();'并删除其他的。 – 2015-03-31 18:48:32

回答

0

设法得到它具有以下功能:

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQuery(
    'SELECT z.id 
    FROM AppBundle:ZeusUsers z 
    ORDER BY z.id DESC'); 
$query->setMaxResults(1); 
$id = $query->getSingleScalarResult(); 

$notification_id = $this->getRequest()->get("notification_id"); 

$query1 = $em->createQueryBuilder(); 
$q = $query1->update('AppBundle:ZeusUsers', 'z') 
    ->set('z.notification_id', '?1') 
    ->where('z.id = ?2') 
    ->setParameter(1, $notification_id) 
    ->setParameter(2, $id) 
    ->getQuery(); 
$p = $q->execute(); 

return new Response("", 200, array("content-type"=>"text/html")); 

感谢您对那些谁帮助我。

相关问题