我想在一个下拉列表(selectlist)中显示,该下拉列表连接模型中字段的值和相关模型中的字段。我有一张桌子' working_day'它链接到一个表'用户'并且'暂停'在视图'暂停'(添加和修改)中,我有一个显示working_day_id的下拉列表,但我希望显示字段' date' ' WorkingDay'和字段'用户名' '用户'。
例如:2016年4月13日(杰罗姆S)。
我已经尝试了$ virtualfield,当我使用来自' WorkingDay'但是当我使用' User'
我试过的$ virtualfield:
public $virtualFields = array('workingday_display_field' => 'concat(WorkingDay.date_working_day, " (", User.username, ")")');
public $displayField = 'workingday_display_field';
我也尝试了下面提出的解决方案,但它不起作用,同样的问题出现了:
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->virtualFields['workingday_display_field'] = sprintf('concat(%s.date_working_day, " (", %s.username, ")")', $this->alias, $this->User->alias);
$this->displayField = "workingday_display_field";
}
有谁知道如何解决问题?
提前谢谢。
答案 0 :(得分:0)
使用不同的模型别名时,这样做有一些问题,另一种推荐的方法是在模型构造方法中处理这些:
```` js
console.log("some code") // and a really really long long long comment which i'd like to not wrap onto the next line
````
本书的这一部分对此进行了描述:http://book.cakephp.org/2.0/en/models/virtual-fields.html#virtual-fields-and-model-aliases
答案 1 :(得分:0)
我有类似的情况,我需要创建一个组合来自不同表的两个字段的列表。我最终做的是重写find()以返回适当的列表。
public function find($type = 'first', $params = array()) {
$workingdays = array();
if ($type == 'list'){
$params = array_merge(
array('contain' => array('User')),
$params
);
$workingdaysUnformatted = parent::find('all', $params);
foreach($workingdaysUnformatted as $workingday){
$workingdays['WorkingDay']['workingday_display_field'] = $workingday['WorkingDay']['date'].' ('.$workingday['User']['username'].')'
}
}
else
$workingdays = parent::find($type, $params);
return $workingdays;
}
可能有一种更为分类的方式来格式化您想要返回的列表,但这说明了一般的想法。