簡體   English   中英

Codeigniter WanWizard DataMapper all_to_array錯誤?

[英]Codeigniter WanWizard DataMapper all_to_array error?

使用WanWizard的DataMapper 1.8.2時出現問題。 我想在get()之后得到一組結果。 下面的代碼片段顯示了我如何做到這一點與我希望做到的程度,以及據文檔所聲稱的應該做到這一點。

        $arr = $loc->get();
//  THIS WORKS
//        $results = array();
//        foreach($arr as $item) {
//            $results[] = $item->stored;
//        }
        $results = $arr->all_to_array();  // THIS DOES NOT WORK
        $results = $loc->all_to_array();  // THIS ALSO DOES NOT WORK

當我使用“ $ results = $ arr-> all_to_array();”時 調用時,將引發異常。 這是syslog中的異常輸出:

PHP Fatal error:  Uncaught exception 'Exception' with message 'Unable to call the method "all_to_array" on the class Location' in /var/www/imhere/application/libraries/datamapper.php:1188\nStack trace:\n#0 /var/www/imhere/application/controllers/locations.php(66): DataMapper->__call('all_to_array', Array)\n#1 /var/www/imhere/application/controllers/locations.php(66): Location->all_to_array()\n#2 [internal function]: Locations->index_get()\n#3 /var/www/imhere/application/libraries/REST_Controller.php(424): call_user_func_array(Array, Array)\n#4 /var/www/imhere/application/libraries/REST_Controller.php(411): REST_Controller->_fire_method(Array, Array)\n#5 /var/www/imhere/system/core/CodeIgniter.php(325): REST_Controller->_remap('index', Array)\n#6 /var/www/imhere/index.php(208): require_once('/var/www/imhere...')\n#7 {main}\n  thrown in /var/www/imhere/application/libraries/datamapper.php on line 1188

還有其他人處理過嗎?

其次,我要使用all_to_array方法的原因是我正在使用帶有別名的select函數,但是當我使用$ item-> stored時卻沒有顯示。 使用all_to_array返回的值不是顯式數據庫列嗎?

您需要確保已加載array擴展: http : //datamapper.wanwizard.eu/pages/extensions.html

您可以在DataMapper配置文件中全局執行此操作:

$config['extensions'] = array('array');

或在模型本身上:

class Location extends DataMapper {

    var $extensions = array('array');

    // ...
}

或在運行時動態地:

$location = new Location();
$location->load_extension('array');
$results = $location->get()->all_to_array();

那將消除錯誤!

要回答第二個問題:您實際上不需要訪問stored屬性,也不需要將結果作為數組返回。 使用面向對象的編程! :)

實現目標的最佳方法是將結果保留為對象,然后在遍歷它們時,只需調用您要使用的屬性即可。 然后,您可以使代碼保持整潔:

$locations = new Location();
$locations->get();
foreach( $locations as $location ) {
    echo $location->property;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM