Doctrine orm 如何在实体上级联用户定义的操作?

Doctrine orm 如何在实体上级联用户定义的操作?,doctrine-orm,Doctrine Orm,我试图找出一种方法,在与一个实体关联的所有实体上级联一个操作。例如,如果我有一个用户,一个用户有实体,而这些实体有实体,我想对每个实体执行一个操作。具体来说,我希望对树中的每个实体执行验证 我如何实现像“getAssociatedEntities()”这样的东西: 我意识到我可以使用生命周期回调来执行验证。然而,设置验证注释使事情变得更加容易。我可以验证我保存的每个实体,但无法验证其关联实体 我可以验证我保存的每个实体,但我无法验证其有效性 关联实体 当然,您可以对与主实体关联的实体执行任何操作

我试图找出一种方法,在与一个实体关联的所有实体上级联一个操作。例如,如果我有一个用户,一个用户有实体,而这些实体有实体,我想对每个实体执行一个操作。具体来说,我希望对树中的每个实体执行验证

我如何实现像“getAssociatedEntities()”这样的东西:

我意识到我可以使用生命周期回调来执行验证。然而,设置验证注释使事情变得更加容易。我可以验证我保存的每个实体,但无法验证其关联实体

我可以验证我保存的每个实体,但我无法验证其有效性 关联实体

当然,您可以对与主实体关联的实体执行任何操作,如果:

  • cascade={“all”}
    添加到
    @ManyToOne
    定义中(必需!
  • @HasLifecycleCallbacks
    针对要执行操作的每个子实体,并标记方法
    @PrePersist
    @postersist
  • 例如,我使用此方法级联删除
    图像
    实体中的图像文件,同时删除包含
    图像
    实体的任何实体:

    这里我有一个livecycle回调

    /**
     * An image.
     * 
     * @ORM\Entity
     * @ORM\Table(name="images")
     * @ORM\HasLifecycleCallbacks
     */
    class ImageEntity extends AbstractEntity
    {
        /**
         * @ORM\PreRemove
         */
        public function preRemoveDeleteFile()
        {
            // remoce file
        }
    }
    
    这里我有一个包含图像的实体(,其中定义了级联操作):

    我可以验证我保存的每个实体,但我无法验证其有效性 关联实体

    当然,您可以对与主实体关联的实体执行任何操作,如果:

  • cascade={“all”}
    添加到
    @ManyToOne
    定义中(必需!
  • @HasLifecycleCallbacks
    针对要执行操作的每个子实体,并标记方法
    @PrePersist
    @postersist
  • 例如,我使用此方法级联删除
    图像
    实体中的图像文件,同时删除包含
    图像
    实体的任何实体:

    这里我有一个livecycle回调

    /**
     * An image.
     * 
     * @ORM\Entity
     * @ORM\Table(name="images")
     * @ORM\HasLifecycleCallbacks
     */
    class ImageEntity extends AbstractEntity
    {
        /**
         * @ORM\PreRemove
         */
        public function preRemoveDeleteFile()
        {
            // remoce file
        }
    }
    
    这里我有一个包含图像的实体(,其中定义了级联操作):


    谢谢你的回复。不幸的是,你没有回答这个问题。我得出的结论是,没有一种方法可以对实体进行级联操作。最好的办法就是使用生命周期回调,我在问题中已经提到了这一点。回调的问题是,它们只在持久化、加载和删除等操作期间发生。如果你想在其他时间采取行动,那你就太倒霉了。然而,我现在认为这是好的。如果您不能使用生命周期回调,您可能不应该这样做:)谢谢您的回复。不幸的是,你没有回答这个问题。我得出的结论是,没有一种方法可以对实体进行级联操作。最好的办法就是使用生命周期回调,我在问题中已经提到了这一点。回调的问题是,它们只在持久化、加载和删除等操作期间发生。如果你想在其他时间采取行动,那你就太倒霉了。然而,我现在认为这是好的。如果您不能使用生命周期回调,那么您可能不应该这样做:)
    /**
     * A competency group name.
     * 
     * @ORM\Entity
     * @ORM\Table(name="product_meta_image_cover")
     */
    class ProductMetaImageCoverEntity extends AbstractEntity
    {
        /**
         * @var \ModuleModel\Entity\ImageEntity
         * @ORM\OneToOne(targetEntity="ModuleModel\Entity\ImageEntity", cascade={"all"}, orphanRemoval=true)
         * @ORM\JoinColumn(onDelete="CASCADE")
         */
        protected $image;
    
    }