2015-05-25 3 views
0

Я хочу обновить поле другого объекта, когда обновление будет произведено сущности.Слушатель событий Symfony

Я продолжаю «last_buy» последнюю дату покупки.

Я хочу, чтобы мой запрос к репозиторию и полученным данным, информация метода setLastBuy сохраняется с последним объектом предложений покупки.

Это то, что моя дата покупки объекта покупки «Покупать» предлагает дату последней покупки объекта.

Но когда я обновляю свои сущности предложения, я получаю ошибку:

Ошибка: Вызов функции члена setLastBuy() на не-объект

namespace MyAppBundle\AppBundle\EventListener; 

use Doctrine\ORM\Event\LifecycleEventArgs; 

use MyAppBundle\AppBundle\Entity\Offers; 

class UpdateModified 
    { 
     public function postUpdate(LifecycleEventArgs $args){ 

      $entity = $args->getEntity(); 
      $entityManager = $args->getEntityManager(); 

      if ($entity instanceof Offers) { 

       $offers = $entityManager->getRepository('MyAppBundle:Buy')->findOffersByBuy($entity); 
       $last_buy = $entity->getUpdatedAt(); 

       foreach($offers as $updateDate){ 
        $updateDate->setLastBuy($last_buy); 
        $entityManager->persist($updateDate); 
       } 
       $entityManager->flush(); 
      } 
} 

ответ

0

Кажется, что переменная $ предложения представляет собой массив, но не массив Buy Objects. Поэтому я уверен, что вы сделали что-то не так в своем классе BuyRepository. Возможно, вы забыли вызвать функцию getResult() или что-то в этом роде.

1

Первое, что я рекомендовал бы, чтобы написать свой собственный EventSubscriber для объявления Entity и затем dispatch ваш Купить объект на обновление, удаление и т.д.

Во-вторых:

if ($entity instanceof Offers) { //$entity is of type Offers 

    $offers = $entityManager->getRepository('MyAppBundle:Buy')->findOffersByBuy($entity); 
    //Offers above is empty array! 
    //findOfferByBuy() where passed entity is not a Buy object will return empty resultset 
    $last_buy = $entity->getUpdatedAt(); 

    foreach($offers as $updateDate){ 
     //$pdateDate is null 
     $updateDate->setLastBuy($last_buy); //throw error 
     $entityManager->persist($updateDate); 
    } 

    $entityManager->flush(); 
} 
+0

Мой код работает, спасибо за ваш ответ. Моя ошибка заключается в том, что в моем репозитории не существует метода getResult. – urreta17

+0

Я бы сказал, что этот ответ более информативен и хорошо структурирован с учетом поставленного вами вопроса. –

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