我有两个实体用户和类别,它们通过多对多关系相互连接。
manyToMany:
categories:
targetEntity: Category
joinTable:
name: users_categories
joinColumns:
user_id:
referencedColumnName: id
inverseJoinColumns:
category_id:
referencedColumnName: id
在我的 UserAdmin.php(我正在使用 Sonata Admin 和 Sonata User 捆绑包)中,它们由以下字段处理:
->add('categories', 'sonata_type_model', array('required' => false, 'expanded' => false, 'multiple' => true, 'label' => 'Chose your categories'))
现在我需要向我的 Category 实体添加额外的字段 - user_counter,它存储与其链接的用户数量。每次用户添加、更新或删除他与类别的关系时,都应该更新它。
一个想法是在用户实体中创建方法,该方法将在保存管理表单之前获取他的类别,将它们与当前输入进行比较,然后做出决定(类别计数器使 +1 或 -1)。并通过生命周期回调(prePersist 和 preUpdate)开启这个方法。
问题:我的代码将获取所有用户类别并将它们与每个表单保存时的当前输入进行比较。我怎样才能避免这样的开销?也许这个任务还有另一种解决方案?
谢谢你的帮助。