我花了太多的时间寻找到同样的事情昨天。
我觉得你可以做的是建立在你的小部件模型的虚拟displayfield,做像限制的虚拟域,限制部分in this section of book.cakephp.com建议的东西:
$this->virtualFields['cool_display_name'] =
sprintf('CONCAT(%s.name, " - ", %s.model)', $this->Brands->alias, $this- >Components->alias);
但是:这将不能工作,除非你'查找'功能在查询时提取足够的数据。 find('list'),这就是你可能调用的下拉菜单,它的默认递归设置为-1,所以它不会遍历得到它。我结束了覆盖在我的情况你有什么小部件模型的find(),喜欢的东西:
public function find($type = 'first', $query = array()) {
$return = array();
switch ($type) {
case 'list': // having to deal with a virtual field, seems like the least-messy workaround right now.
$query['contain'] = 'User.full_name';
$results = parent::find('all', $query);
foreach($results as $k => $r) {
$return[$r[$this->alias]['id']] = $r['User']['full_name'];
}
break;
default:
$return = parent::find($type, $query);
break;
}
return $return;
}
我在那里做是手工打造的数组列表框中的元素想到,这是这样的: array('id' => 'display text') 您还会看到在那里,我用CakePHP的包含要素,使不返回数据的所有,但正是我需要的,以便为所有虚拟现场数据将被提供。