如何使用Doctrine2更新persist / delete / update上的相关实体列

时间:2013-08-06 12:01:20

标签: symfony doctrine-orm

我有以下实体:

/**
 * @ORM\Entity
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */
    protected $category;
}

/**
 * @ORM\Entity
 */
class Category
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="category", fetch="EXTRA_LAZY")
     */
    protected $products;

    /**
     * @ORM\Column(type="integer")
     */
    protected $productCount = 0;

    public function updateProductCount()
    {
        $this->productCount = $this->products->count();
    }
}

我希望每当更新/添加/删除相关产品时,都会更新productCount类别字段。我已经创建了方法Category::updateProductCount()来执行此操作,但我不确定最佳方法。

任何帮助?

2 个答案:

答案 0 :(得分:1)

这不是PHP的作用,你应该使用sql trigger。而且我认为你不应该在你的数据库中拥有count属性。例如,你可以这样做:

  • 从category = ...
  • 的产品中选择count(*)
  • 创建SQL视图

答案 1 :(得分:1)

我认为这就是你要找的东西:Doctrine2 LifeCycle Events 而不是$this->productCount = $this->products->count();尝试$this->productCount = count($this->products);

我不知道你为什么要把它存放在数据库中。我只想使用一个吸气剂:

public function getProductCount(){ return count($this->products); }