如何在EntityAuditBundle中忽略多对多关联的审计?
问题描述
我使用EntityAuditBundle审计实体变更,我的User实体采用Doctrine自引用多对多关联,代码如下:
<?php /** @Entity **/ class User { // ... /** * @ManyToMany(targetEntity="User", mappedBy="myFriends") **/ private $friendsWithMe; /** * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe") * @JoinTable(name="friends", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")} * ) **/ private $myFriends; public function __construct() { $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection(); $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection(); } // ... }
已配置审计该实体:
simple_things_entity_audit: audited_entities: - App\Entity\User
目前该实体的多对多关联及关联表friends也被审计,我希望忽略这部分审计,是否可行?期望通过类似如下配置实现:
simple_things_entity_audit: global_ignore_tables: - friends
解决方案
可行,你可以通过两种方式实现忽略多对多关联的审计:
方式一:全局忽略关联表
直接在配置中添加global_ignore_tables字段,指定要跳过审计的关联表名称,完全符合你期望的配置方式:
simple_things_entity_audit: audited_entities: - App\Entity\User global_ignore_tables: - friends
该配置会让EntityAuditBundle完全跳过对friends表的所有审计操作。
方式二:精准忽略实体关联字段
如果只想忽略User实体中特定的多对多关联字段,而非整个表,可以在对应的属性注解中添加@AuditIgnore:
<?php /** @Entity **/ class User { // ... /** * @ManyToMany(targetEntity="User", mappedBy="myFriends") * @AuditIgnore **/ private $friendsWithMe; /** * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe") * @JoinTable(name="friends", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")} * ) * @AuditIgnore **/ private $myFriends; // ... }
这种方式只会忽略指定的关联字段审计,不会影响User实体其他属性的审计记录。
注意:请确保你的EntityAuditBundle版本支持上述配置,部分旧版本可能需要升级才能使用global_ignore_tables或@AuditIgnore注解。
内容的提问来源于stack exchange,提问作者Oleg Dmitrochenko
相关产品推荐
相关产品推荐

