0

我想使用 cakephp 的 ORM 的 find() 方法翻译这个 $query。

$custom_query = $this->Agency->query(
        "SELECT a.id, a.name, a.created, c.total
          FROM agencies a
            join (SELECT agency_id, sum(price) total
                    FROM commands
                    GROUP BY agency_id) C
              on a.id = c.agency_id;"
    );

(这个查询完全符合我的要求,但我想了解如何使用 cakephp ORM 和 $virtualFields)感谢您的帮助和您的时间。

4

1 回答 1

0

如果您使用的是 CakePHP 1.3 或更高版本,您可以在模型中定义虚拟字段(即计算字段)。

根据您的查询,我将在模型类中定义虚拟字段,如下所示:

$virtualFields = array(
   'total'=>'(SELECT SUM(price) FROM commands WHERE agency_id = Agency.id)'
);

然后您可以将该字段称为常规 ORM 字段:

$this->Agency->find('all',array(
    'fields'=>array(
        'id','name','created','total'
        )
    )
);

Cake 手册页:http ://book.cakephp.org/2.0/en/models/virtual-fields.html

于 2012-09-24T02:44:28.597 回答