1

私は検索しましたが、同じ問題について多くの質問がありますが、どれも私の問題を解決しません。

私はエンティティを持っています、これがコードです:

/*
 * @ORM\HasLifecycleCallbacks
 */
class MyEntity
{
    // some preoperties here...

    /**
     * @ORM\Column(type="text", nullable=true)
     * @Assert\MaxLength(limit="500")
     */
    private $delivery = null;

    /**
     * @var $deliveryOn bool
     *
     * Virtual field used for $delivery property organization
     */
    private $deliveryOn = false;

    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preSetDelivery()
    {
        if ($this->deliveryOn == false)
            $this->delivery = null;
    }

    /**
     * @ORM\PostLoad()
     */
    public function loadDeliveryOn()
    {
        if ($this->delivery != null)
            $this->deliveryOn = true;
    }
}

loadDeliveryOnメソッドは常に完全に機能します。しかし、preSetDeliveryエンティティをデータベースに初めて永続化したときにのみ発生します。オブジェクトが更新されたときにも呼び出されるようにしたいのですが、機能しません。そして、その理由はわかりません。

私の編集コントローラー:

public function editAction($id)
{
    // some code here...
    // ...

        $request = $this->getRequest();
        if ($request->isMethod('POST'))
        {
            $form->bind($request);

            if ($form->isValid())
            {
                $em->flush();
            }
        }
}
4

3 に答える 3

0

に関する公式ドキュメントpreUpdateから:

渡されたエンティティのフィールドへの変更は、フラッシュ操作によって認識されなくなりました。イベントに渡された計算された変更セットを使用して、プリミティブ フィールド値を変更します。

アクセスできる場合は、 onFlushUnitOfWorkにあるように変更セットを再計算する方法がありますか?

于 2013-03-21T00:03:43.993 に答える
0

継承を使用する場合 - たとえば @ORM\InheritanceType("SINGLE_TABLE") の場合、親クラスに @ORM\MappedSuperclass を追加する必要があります

于 2013-03-21T12:38:42.407 に答える
-1

PreUpdate は、エンティティに実際の変更がある場合にのみ発生します。フォームで何も変更しない場合、エンティティに変更はなく、preUpdate リスナーは呼び出されません。

于 2013-03-24T00:37:11.247 に答える