0

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

有趣的是,如果我在读取函数中的数据源中执行 die(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));
}
4

2 回答 2

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.
于 2013-08-06T12:35:30.940 回答
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 值与结果数组中的值不同

希望有帮助

于 2013-09-16T05:21:32.993 回答