URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。
サーバのテーブルに,CakePHP経由でアップロードしたCSVファイルをインポートする必要がありましたので,その処理を作ってみました。CSVファイルをサーバにアップロードし,そのファイルをDBにインポートするという手順になろうかと思います。
<div class="options form">
<div class="actions">
<ul>
<li><?php echo $html->link('メニューに戻る', array('action'=>'index'));?></li>
</ul>
</div>
<?php echo $form->create('Options', array('action'=>'upload', 'type' => 'file'));?>
<fieldset>
<legend>データのアップロード</legend>
<?php
echo $form->file('result');
?>
</fieldset>
<?php echo $form->end('アップロード');?>
</div>
コントローラ
function upload(){
if (!empty($this->data)) {
$model =& $this->Result;
/* @var $model result */
$up_file = $this->data['Options']['result']['tmp_name'];
$fileName = CSV_FILE_PATH."result.csv";
if (is_uploaded_file($up_file)){
move_uploaded_file($up_file, $fileName);
$model->loadFromCSV($fileName);
$this->Session->setFlash('データをアップロードしました。');
$this->redirect(array('action'=>'index'));
}
}
}
コントローラでは,返された$this->dataの'tmp_name'の中にアップロードされたファイル名が入っています。上記のコード では,それのファイルをmove_uploaded_file関数で,特定の場所に保存しています。その後,モデルに定義したloadFromCSVメ ソッドでDBに読み込んでいます。
function loadFromCSV($fileName) {
$this->begin();
try{
$this->deleteAll('1 = 1', false);
$csvData = file($fileName, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
foreach($csvData as $line){
$record = split(",", $line);
$data = array(
"field1" => $record[0],
"field2" => $record[1]
);
$this->create($data);
$this->save();
}
$this->commit();
} catch(Exception $e) {
$this->rollback();
}
}
モデルに定義したloadFromCSVメソッドは上記の通りです。ファイルをfile関数で読み込み,各行をsplitで分割してフィールドに セットしています。MySQLにはファイルからデータをインポートするSQL文もあるので,それを使おうかとも思ったのですが,CakePHPの機能で実 装しました。
大変な処理かと思ったのですが,わりと簡単に実現できました。