php - 根据实体属性值查询所有对象?

标签 php sql symfony doctrine-orm dql

我的实体中有一个自定义属性:

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/

相关文章:

php - Gherkin + Behat 场景大纲抛出 Behat\Gherkin\Exception\ParserException

php - 两个项目共享相同的用户帐户

php - Laravel/MySql 基于 Id 的唯一字符串?

sql - 将数据类型 Char 转换为 Nvarchar

symfony - Doctrine 2 不能在 ManyToOne 关系中使用 nullable=false 吗?

symfony - Twig:允许 HTML,但转义脚本

php - 在 magento 中注册后自动登录客户

sql - 可以使用 PostgreSQL 执行跨数据库查询吗?

mysql 从不同的表中查找包含单词的记录?

Symfony,如何在重新导入我的表后保留实体存储库的声明