我仍在使用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(名字,“”,名字)会使它变得不可思议。如何教蛋糕来更改虚拟字段的模型名称?
除了在数据库中创建具有“第二”模型的视图外,是否有任何解决方案?
非常感谢你的帮助。
答案 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