事件监听器Symfony

时间:2015-05-25 15:04:51

标签: entity-framework 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(); 
            }
}

2 个答案:

答案 0 :(得分:1)

我建议首先为您的优惠实体编写自己的EventSubscriber,然后在更新,删除等时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(); 
}

答案 1 :(得分:0)

似乎变量$ offers是一个数组,但不是一个Buy Objects数组。所以我打赌你在BuyRepository类中做错了。也许你忘了调用getResult()函数或类似的东西。