私が作成したコンポーネントがあります:
class CsvImportAction extends CAction {
public $modelClass;
function run()
{
$searchModel = $this->modelClass;
$model = new CsvImportForm;
$model->selected_table = $searchModel::model()->tableName();
if(isset($_POST['CsvImportForm']))
{
$model->attributes=$_POST['CsvImportForm'];
if($model->validate())
{
$csvFile=CUploadedFile::getInstance($model,'file');
$tempLoc=$csvFile->getTempName();
$handle = fopen($tempLoc, "r");
$sql = "insert into $model->selected_table ({$model['order_values']}) values";
while (($data = fgetcsv($handle, 10000, "{$model['delimiters']}", "\"")) !== FALSE) {
$num = count($data);
//load data into table
//load only first three - need to change it to load everything
$sql .= "(";
foreach($data as $k=>$v)
{
$sql.="'{$v}',";
}
$sql .= "),";
}
fclose($handle);
$sql = substr_replace($sql ,"",-1);
$sql = str_replace(",)", ")", $sql);
$connection=Yii::app()->db;
$transaction=$connection->beginTransaction();
try
{
$connection->createCommand($sql)->execute();
$transaction->commit();
}
catch(Exception $e) // an exception is raised if a query fails
{
Utility::disableLog();
Utility::setFlashError("There is an error!");
Yii::app()->end();
$transaction->rollBack();
}
Utility::setFlashSuccess("Successful import");
//$this->redirect(Yii::app()->createUrl("/contacts/admin"));
}
}
$this->getController()->render("//generic/importcsv",array('model'=>$model));
}
}
次のようなものを追加して、public $unique_fields
同じフィールド名があるかどうかを確認する必要が$model['order_values']
あり、データベースに$this->unique_fields
CSV の値が$model['order_values']
存在するかどうかを確認する必要があります。それらが存在しない場合は、データベースに挿入する必要があります。誰でも方法を知っていますか?