1

我正在使用树行为,当我通过->find('threaded', ...)查询时- 正如预期的那样 - 我得到了树。

但我希望发生额外的连接,所以像:

$data = $this->Category->find('threaded', array(
    'joins' => array(
        array('table' => 'videos',
            'alias' => 'Video',
            'type' => 'LEFT',
            'conditions' => array(
                'Category.id = Video.category_id',
            )
        )
    )
));

Category hasMany Video,但Video不是树,只是相关的。

我可以为此使用线程查询吗?

4

1 回答 1

1

为了产生“线程化”输出 Cake 1) 调用 find('all),然后 2) 将结果数组放入 Set::nest() 函数。

因此,只需使用标准查找 + 您的自定义连接获取您的输出,然后只需使用Set::nest

(注意:在 Cake 2 中Hash已替换Set,但 Cake 仍在Set内部使用。现在两者都可以使用。Hash::nest

所以如果你看一下 Cake 的model.php,嵌套函数是这样调用的:

return Set::nest($results, array(
            'idPath' => '/' . $this->alias . '/' . $this->primaryKey,
            'parentPath' => '/' . $this->alias . '/' . $parent
        ));

将其用作通话的模板。对于您的数据,它看起来像:

return Set::nest($results, array(
            'idPath' => '/Category/id',
            'parentPath' => '/Category/parent_id'           ));
于 2012-11-01T23:44:53.170 回答