0

我有以下实体:

/**
 * @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()执行此操作的方法,但不确定最佳方法。

有什么帮助吗?

4

2 回答 2

1

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

  • 从类别 = ... 的产品中选择计数(*)
  • 创建 SQL 视图
于 2013-08-06T12:28:33.480 回答
1

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

我不知道为什么你必须将它存储在数据库中。我只会使用一个吸气剂:

public function getProductCount(){ return count($this->products); }
于 2013-08-06T13:40:13.600 回答