我希望在对实体进行更新时更新另一个实体的字段。
我继续“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 :(得分: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()函数或类似的东西。