0

csv レコードを取得して mysql データベースにインポートする csv スクリプトがあります。問題は、cakephp がデータの保存に失敗しており、cakephp が検証エラーを出していないことです。保存からparent_idまたはidを削除すると、すべてのレコードが正常にインポートされますが、idおよび親ID列を追加すると、保存されません。時々、最初のレコードを追加してから停止します。コードを見ていくと、cake は既に存在するレコードを見つけようとしています。既存の ID があっても挿入したい。

public function admin_uploadTopics() {
    $enabled = true;        
    if($enabled) {
        $response = array();
        $response['success'] = 0;
        $response['failure'] = 0;
        //Represents a record set row number
        $cr = 0;
        //will hold each column field name      
        $field = array();
        //variable that will store the entire record set
        $d = array();
        //opens csv file
        if (($handle = fopen(APP."../topics", "r")) !== FALSE) {
            //loops through each line
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                $num = count($data);
                //creates a row             
                $d[$cr] = array();
                for ($c=0; $c < $num; $c++) {
                    //if this is the first r, gather the field names
                    if($cr == 0) {
                        $field[$c] = $data[$c];
                    } else {//else gather the data
                        if($c == 0) {
                            $d[$cr]['Topic'] = array();
                        }//this constructs a array that puts the data with the correct field name
                        //this is the second row (1) but I want it to begin at 0 so I do cr-1
                        $d[$cr-1]['Topic'][$field[$c]] = $data[$c];                         
                    }
                }
                if($cr) {
                    //reset model
                    $this->Topic->create();
                    //save the row
                    //$d[$cr-1]['Topic']['id'] = '';
                    //$d[$cr-1]['Topic']['parent_id'] = '';
                    if($this->Topic->save($d[$cr-1], false)) {
                        $response['success'] += 1;
                    } else {
                        $response['failure'] += 1;
                    }                       
                }
                //create new record row 
                $cr++;
            }
            fclose($handle);
        }
        echo "There were ".$response['failure']." errors and ".$response['success']." success when resetting.";
        exit();         
    }
    exit();
}
4

1 に答える 1

1

保存してこれを試してください

if($this->Category->save($data, false)) {
        echo "Saved!<br/>";
    }
    else{
        pr($this->validateErrors($this->Category));

    } 

この配列も確認する必要があります。

$t = array(
        'id'=>(isset($cat['id'])?$topic['id']:""),
        'parent_id'=>(isset($topic['parent_id'])?$topic['parent_id']:""),
        'lft'=>(isset($cat['lft'])?$topic['lft']:""),
        'rght'=>(isset($cat['rght'])?$topic['rght']:""),
        'name'=>(isset($cat['name'])?$topic['name']:""),
        'description'=>(isset($cat['description'])?$topic['description']:""),
        'is_active'=>(isset($cat['is_active'])?$topic['is_active']:""),
        'zin_members_only'=>(isset($cat['zin_members_only'])?$topic['zin_members_only']:""),
        'not_show_submit_request_link'=>(isset($topic['not_show_submit_request_link'])?$cat['not_show_submit_request_link']:"")
    );

これらの行で $topic を数回使用しましたが、どこから $topic が来ているのかわかりません

于 2012-09-13T10:43:15.920 に答える