2017-01-17 5 views
2

Я хотел бы знать, есть ли способ обновить значения объектов, уже извлеченных из базы данных, после пользовательского обновления.Doctrine 2 обновляющие объекты после обновления

Пример

<?php 

/** 
* Element 
* 
* @ORM\Table(name="table_element") 
*/ 
class Element{ 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
     private $id 

    /** 
    * 
    * @var string 
    * 
    * @ORM\Column(name="element_name", type="string", length=255) 
    */ 
     private $name 

     public function setName($name){ 
      $this->name = $name; 
     } 

     public function getName(){ 
      return $this->name; 
     } 

     public function getId(){ 
      return $this->id; 
     } 
} 

// Inside Controller 

    $em = $this->getDoctrine()->getManager(); 

    $element = $em->getRepository('Element')->find(1); 

    // This prints "Test 1" 
    echo $element->getName(); 

    $qb = $em->createQueryBuilder(); 

    $qb->update('Element', 'E') 
     ->set('E.name', 'New Test Name') 
     ->where('E.id = :id') 
     ->setParameter('id', $element->getId()) ; 

    $qb->getQuery()->execute(); 

    // This still prints "Test 1", i need to print "New Test Name" without using again a select 
    // Something like $em->refreshManagedEntities(); 
    echo $element->getName(); 

мне нужно напечатать "Имя нового теста" без повторного использования выберите, что-то вроде $ em-> упорствовать ($ элемент); $ Em-> refreshAllManagedEntities();

Есть ли способ?

P.S. Я не могу избежать пользовательских запросов, это простой пример того, что я должен делать.

ответ

4

Для этого следует избегать запросов и использовать диспетчер сущностей:

$qb = $em->createQueryBuilder(); 

$element = $em->getRepository('Element')->find(1); 

// Prints "Test 1" 
echo $element->getName(); 

$element->setName('New Test Name'); 
$em->persist($element); 
$em->flush(); 

// Prints "New Test Name" 
echo $element->getName(); 

Если вы должны работать с запросами, или если предприятие изменение делается вне вашего скрипта, вы должны использовать refresh

$em->refresh($entity); 
+0

Хорошо, я знаю, но я не могу избежать запросов в этом случае, я только что разместил пример с добавлением примера, который я должен сделать. –

+0

Большое спасибо! Я такой noob ... –

+0

Не говорите, что все мы учимся! Happy to help – goto

 Смежные вопросы

  • Нет связанных вопросов^_^