Cakephp下拉列表(选择列表)+如何显示模型和相关模型的值

时间:2016-04-13 14:08:28

标签: cakephp cakephp-2.0 dropdown display

我想在一个下拉列表(selectlist)中显示,该下拉列表连接模型中字段的值和相关模型中的字段。我有一张桌子' working_day'它链接到一个表'用户'并且'暂停'在视图'暂停'(添加和修改)中,我有一个显示working_day_id的下拉列表,但我希望显示字段' date' ' WorkingDay'和字段'用户名' '用户'。

例如:2016年4月13日(杰罗姆S)。

我已经尝试了$ virtualfield,当我使用来自' WorkingDay'但是当我使用' User'

中的字段时,它不起作用

db schema

我试过的$ 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";
}

有谁知道如何解决问题?
提前谢谢。

2 个答案:

答案 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;
}

可能有一种更为分类的方式来格式化您想要返回的列表,但这说明了一般的想法。