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

在CakePHP中进行手动联接不会调用联接模型的构造函数(需要虚拟字段),cakephp,join,Cakephp,Join,我正试图通过一组连接表构建一个动态查询。它们生成动态别名以避免冲突(非唯一别名) 然而,在我的联接表中,我有一些未被处理的virtualFields。进一步检查后,似乎没有调用联接的表\uu construct()函数 在CakePHP v2.2.8中,有没有一种方法可以在连接的表上获取virtualFields 谢谢手动连接不使用您的型号 手动联接不使用您的模型。使用手动联接,可以手动定义联接并为其指定别名。尽管此别名可能与现有模型相同,但CakePHP不会将您的模型用于连接的表 如果您需要v

我正试图通过一组连接表构建一个动态查询。它们生成动态别名以避免冲突(非唯一别名)

然而,在我的联接表中,我有一些未被处理的virtualFields。进一步检查后,似乎没有调用联接的表
\uu construct()
函数

在CakePHP v2.2.8中,有没有一种方法可以在连接的表上获取
virtualFields

谢谢

手动连接不使用您的型号 手动联接不使用您的模型。使用手动联接,可以手动定义联接并为其指定别名。尽管此别名可能与现有模型相同,但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'
        )
    ),
)

可以在查询上共享的任何代码。在很多这样的边缘情况下,我倾向于跟踪代码以了解它实际上在做什么(蛋糕书和代码并不总是一致)。哦,哪种数据库驱动程序?php显示了虚拟字段处理。谢谢:)这让我达到了我需要的位置@巴里查普曼很高兴我能帮上忙。祝你的项目好运!你太棒了。几个小时的捶眉,殴打。即使是在HABTM的关系上工作<代码>$this->Site->PaymasterUser->virtualFields['full_name']=“CONCAT(UserDetail.first_name,”,UserDetail.last_name)”;$paymasterUsers=$this->Site->PaymasterUser->find('list',array('fields'=>array('PaymasterUser.id','PaymasterUser.full_name'),