我的实体中有一个自定义属性:
public function getStockSoldPercentage()
{
return ($this->getStockSold() / $this->getFullStock()) * 100;
}
通过使用此属性,我可以访问库存售完的百分比。目前我使用这样的查询
$bestellers = $this->getDoctrine()->getRepository('CoreBundle:Products')->findAll();
并直接在我的 Twig 模板中处理对象的过滤(所有百分比高于例如 75% 的产品)。所以你看,这对于扩展来说并不是很好。当用户每次访问网站时我都必须查询 1000 个产品时,这就有点矫枉过正了……
我想构建一个自定义实体存储库,例如 findAllBestSellers()
并仅查询 getStockSoldPercentage()
属性高于 75 的所有对象。
我该怎么做?
编辑:
getStockSold()
和 getFullStock()
不是字段,而是函数。它们看起来像这样:
public function getFullStock()
{
$stock = 0;
foreach ($this->variants as $variant) {
$stock += $variant->getStock();
}
return $stock;
}
public function getStockSold()
{
return $this->getFullStock() - $this->getCurrentStock();
}
最佳答案
事实上,您的应用逻辑需要太复杂,无法在应用程序中以其他方式执行。您不能简单地用 SQL 请求数据库来获得您想要的内容。
但是,我建议您创建一个 sql 函数,该函数返回您的产品并记录其中的所有逻辑。这将负载平衡应用服务器上的费用,并且 mysql 的效率要高得多。
之后,您可以通过执行以下操作来调用您的函数:
public function findAllBestSellers() {
$sql = "SELECT PRODUCTS_WITH_STOCK_SOLD_PERCENTAGE() AS products";
$stmt = $this->dbal->executeQuery($sql);
$stmt->execute();
return current($stmt->fetch());
}
关于php - 根据实体属性值查询所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821467/