$ virtualFields和$ belongssto碰撞,解决方案?

时间:2015-04-02 13:34:21

标签: cakephp cakephp-2.3 cakephp-model

我仍在使用cake 2.5.3,但我在更新中找不到任何相关内容。我的问题是,在另一个模型中,属于与vitualfields碰撞。

首先我制作了一个项目模型:

class Project extends AppModel {
public $belongsTo = array(
    'Responsibleperson' => array(
        'className' => 'User',
        'foreignKey' => 'responsibleperson_id'
    ),
    'Creator' => array(
        'className' => 'User',
        'foreignKey' => 'creator_id'
    ),
);
}

负责人和qho创建项目的人可能不同,但他们都是用户。

这很好用。真。

后来我在用户模型中添加了以下内容:

public $virtualFields = array(
    'fullname' => 'CONCAT(User.prename, " ", User.name)'
);

现在控制器中的几乎所有$ this-> Project-> find()调用都失败了

Column not found: 1054 Unknown column 'User.vorname' in 'field list'

当您查看mysql查询时,您会看到Query没有接管更改后的Model名称,并且仍然为用户提供...

SELECT 
`Project`.`id`, 
`Project`.`projectname`, 
`Project`.`responsibleperson_id`, 
`Project`.`creator_id`, 
`Responsibleperson`.`id`, 
`Responsibleperson`.`username`, 
`Responsibleperson`.`prename`, 
`Responsibleperson`.`name`, 
(CONCAT(`User`.`prename`, " ", `User`.`name`)) AS `Responsibleperson__fullname`, 
`Creator`.`id`, 
`Creator`.`username`,  
`Creator`.`prename`, 
`Creator`.`name`, 
(CONCAT(`User`.`prename`, " ", `User`.`name`)) AS `Creator__fullname` 
FROM 
`database`.`projects` AS `Project` 
LEFT JOIN 
`database`.`users` AS `Responsibleperson` 
ON 
(`Project`.`responsibleperson_id` = `Responsibleperson`.`id`) 
LEFT JOIN 
`swdevel`.`plantbook_users` AS `Creator` 
ON 
(`Project`.`creator_id` = `Creator`.`id`) 
WHERE 
(`Project`.`projektname` LIKE '%Searchsometing%')

将“用户”留在虚拟区域中并且只写一个CONCAT(名字,“”,名字)会使它变得不可思议。如何教蛋糕来更改虚拟字段的模型名称?

除了在数据库中创建具有“第二”模型的视图外,是否有任何解决方案?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您需要在virtualFields构造函数中设置User来处理模型别名:

class User extends AppModel {

    public function __construct($id = false, $table = null, $ds = null) {
        parent::__construct($id, $table, $ds);
        $this->virtualFields['fullname'] = sprintf(
            'CONCAT(%s.prename, " ", %s.name)', $this->alias, $this->alias
        );
    }

}

请参阅http://book.cakephp.org/2.0/en/models/virtual-fields.html#virtual-fields-and-model-aliases