在CakePHP中进行手动连接不会调用已连接模型的构造函数(需要虚拟字段)

时间:2013-05-27 05:55:17

标签: cakephp join

我正在尝试通过连接表数组构建动态查询。这些生成动态别名以避免冲突(非唯一别名)。

但是,在我的连接表中 - 我有一些未被处理的虚拟字段。进一步检查后,似乎没有调用已连接的表__construct()函数。

有没有办法在CakePHP v2.2.8中的联接表上获取virtualFields

由于

1 个答案:

答案 0 :(得分:5)

手动连接使用您的模型

手动连接不使用您的模型。使用手动连接,您手动定义连接并为其指定别名。虽然此别名可能与现有模型的相同,但CakePHP不会将您的模型用于连接表。

如果您需要virtualFields,根据使用的“数据”,您可以将virtualField移动到您要查询的“主要”模型,例如:

$this->Foo->virtualFields['foobar'] = 'CONCAT(\'Hello \', Bar.name)';

$foo = $this->Foo->find(
    'all',
    array(
        'fields' => array(
            'Foo.name',
            'Foo.foobar',
        ),
        'joins' => array(
            array(
                'table' => 'bars',
                'alias' => 'Bar',
                'type'  => 'INNER',
                'conditions' => array(
                    'Bar.id = Foo.bar_id',
                )
            )
        ),
        'recursive' => -1
    )
);
debug($foo);

返回;

array(
    (int) 0 => array(
        'Foo' => array(
            'title' => 'Foo One',
            'foobar' => 'Hello World'
        )
    ),
    (int) 1 => array(
        'Foo' => array(
            'title' => 'Foo Two',
            'foobar' => 'Hello Planet'
        )
    ),
)