自定义数据源查找('列表')问题

时间:2013-07-22 14:21:17

标签: cakephp datasource

我正在创建自定义数据源,当我请求find('list')时遇到问题。 find('all')在我的控制器中完美地返回我想要的东西,但find('list')只返回一个空数组。

有趣的是,如果我在读取函数中的数据源中执行死(Debug($ results))然后我正确地得到了我的find('list')数组,但如果我返回它,那么我得到一个空数组我的控制器。有什么想法吗?

以下代码:

public function read(Model $model, $queryData = array(), $recursive = null) {
    if ($queryData['fields'] == 'COUNT') {
        return array(array(array('count' => 1)));
    }

    $this->modelAlias = $model->alias;
    $this->suffix = str_replace('Flexipay', '', $model->alias);

    if(empty($model->id)){
        $this->url = sprintf('%s%s%s', $this->sourceUrl, 'getAll', Inflector::pluralize($this->suffix));
    }

    $r = $this->Http->get($this->url, $this->config);

    if($r->isOk()){
        $results_src = json_decode($r->body, true);

        if(is_array($results_src)){

            //$this->find('list');
            if($model->findQueryType == 'list'){
                return $this->findList($queryData, $recursive, $results_src);
            }

            //$this->find('all');
            foreach($results_src['PortalMandantenResponses']['portalMandantenResponses'] as $r){
                $results[] = $r;
            }

            if(!empty($results)){
                $e =  array($model->alias => $results);
                return $e;
            }
        }
    }else{
        //
    }
    return false;
}

我对die的回复(debug(array($ model-> alias => $ results);

(int) 0 => array(
    'Mandant' => array(
        'ns2.id' => (int) 79129,
        'ns2.name' => 'company a'
    )
),
(int) 1 => array(
    'Mandant' => array(
        'ns2.id' => (int) 70000,
        'ns2.name' => 'company b'
    )
),

控制器代码在这里:

    public function test2(){
    //$a = $this->User->find('list');
    //die(debug($a));
    $this->loadModel('Pay.Mandant');
    $a = $this->Mandant->find('list', array('fields' => array('ns2.systembenutzernr', 'ns2.systembenutzernrBezeichnung')));
    die(debug($a));
}

2 个答案:

答案 0 :(得分:0)

使用,

$a = $this->Mandant->find('list', array('fields' => array('ns2.systembenutzernr', 'ns2.systembenutzernrBezeichnung')));
$this->set(compact('a'));

You can use $a for the dropdown creation in view file.

答案 1 :(得分:0)

我在编写自定义模型时遇到了同样的问题,虽然我不知道你的案例中的原因是否相同,但你应该看看同一个地方。

在Model.php中有一个函数_findList($ state,$ query,$ results),我的问题是你在find()调用中指定的字段必须与$ results结构完全匹配,否则在结尾处_findList()函数调用:

Hash::combine($results, $query['list']['keyPath'], $query['list']['valuePath'], $query['list']['groupPath'])

返回空数组。 {n} .MODELNAME.id等的keyPath必须与$ results中指定的模型名称匹配,例如

[0] => ['MODELNAME'] = array()
[1] => ['MODELNAME'] = array()

在我的情况下,我的keyPath和valuePath的MODELNAME值与结果数组中的值不同

希望有所帮助