从包含嵌套的表中选择一个字段

时间:2013-02-12 06:52:07

标签: php cakephp cakephp-2.0

my use case

我有一个如上所述的用例。在我的CategoriesController.php中,我在Category上查询如下:

$category = $this->Category->Transaction->find("first", array(
    "fields" => array("Category.*", "COUNT(*) AS TOTAL", "AVG(Transaction.debit) AS AVERAGE_COST"),
    "conditions" => array("not" => array("Transaction.debit" => null)),
    "contain" => array("Category" => array("CategoryType")),
    "group" => "Transaction.category_id",
    "order" => array("TOTAL" => "desc"),
));

这就是我得到的回报:

Array
(
    [Category] => Array
        (
            [id] => 2
            [name] => FOOD
            [category_type_id] => 2
        )

    [0] => Array
        (
            [TOTAL] => 4596
            [AVERAGE_COST] => 7.668451
        )

)

问题:如何在返回字段中指定CategoryType

我尝试使用Category.CategoryType.*CategoryType.*并且无法正常工作。但是如果我完全取出fields数组并让cakephp默认处理,那么cakephp设法在数组中返回CategoryType。

1 个答案:

答案 0 :(得分:0)

这里有几点需要注意:

  1. 您是否在您的category_type模型中附加了可包含的行为?来自本书:使用'fields'和'contains'选项时 - 请小心包含您的查询直接或间接需要的所有外键。另请注意,因为Containable必须附加到收容中使用的所有模型,您可以考虑将其附加到您的AppModel。

  2. 由于您在可包含参数之外分配fields,因此这可能会覆盖您的可包含行为。考虑将"fields" => array("Category.*", "COUNT(*) AS TOTAL", "AVG(Transaction.debit) AS AVERAGE_COST"),移动到您的包含数组中。