我有以下实体:
/**
* @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()
来执行此操作,但我不确定最佳方法。
任何帮助?
答案 0 :(得分:1)
这不是PHP的作用,你应该使用sql trigger。而且我认为你不应该在你的数据库中拥有count属性。例如,你可以这样做:
答案 1 :(得分:1)
我认为这就是你要找的东西:Doctrine2 LifeCycle Events
而不是$this->productCount = $this->products->count();
尝试$this->productCount = count($this->products);
我不知道你为什么要把它存放在数据库中。我只想使用一个吸气剂:
public function getProductCount(){ return count($this->products); }