【问题标题】:In CakePHP 2.x ORM + use Function MySQL AND NameClass Models remove ;(在 CakePHP 2.x ORM + 中使用函数 MySQL 和 NameClass 模型删除 ;(
【发布时间】:2015-07-07 23:45:21
【问题描述】:

问题,如何制作 ORM CakePHP,不要浪费我的表名或类,当一个 mysql 函数如 SUM() "sum(SenasaPedidosDetalles.kg_reales) total_kg_reales" 着火时。

示例代码在:

打印:http://s25.postimg.org/7z1fiwpyn/Print_de_pantalla_612.jpg

示例数据输出:

打印:http://s25.postimg.org/ahn4jlbov/Print_de_pantalla_614.jpg

CakePHP 2.x 解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: php mysql cakephp orm model


    【解决方案1】:

    编辑: 正如 AgRizzo 在评论部分所指出的,您应该在需要时创建虚拟字段:

    $this->Model->virtualFields['total_kg_reales'] = 'SUM(Model.kg_reales)';
    $this->Model->find(...) ;
    

    您可以使用虚拟字段(在您的模型中):

    public $virtualFields = array(
        'total_kg_reales' => 'SUM(SenasaPedidosDetalles.kg_reales)'
    );
    

    如果你想处理模型别名(见http://book.cakephp.org/2.0/en/models/virtual-fields.html):

    public function __construct($id = false, $table = null, $ds = null) {
        parent::__construct($id, $table, $ds);
        $this->virtualFields['total_kg_reales'] = sprintf(
            'SUM(%s.kg_reales)', $this->alias
        );
    }
    

    【讨论】:

    • 好答案。在构造函数中设置虚拟字段通常是最好的,这样可以正确处理别名,如图所示。我经常发现通过直接分配虚拟字段属性来假设别名是有问题的。
    • 当它是聚合 SQL 函数(MIN、MAX、SUM、AVG)时,我认为您应该在构造函数中创建虚拟字段。我的推理(因为我现在无法测试):除非每个 SQL 查询(即在此模型上执行 find)都有 GROUP BY,否则 find 将只返回 1 行。 tl;dr 我认为您想在 find 之前创建虚拟字段
    • @AgRizzo 你可能是对的(我也无法测试它)。我暂时更新了我的帖子(稍后我会检查详细信息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2020-01-23
    • 2023-03-23
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多