У меня есть две таблицы « Accommodation
и Facility
, которые связаны между собой во многих отношениях с третьим столом, « Accommodation_facility
.
Используя Yii, как вы можете вставить несколько записей данных в таблицу Accomodation_facility
?
Вставка с использованием цикла происходит очень медленно. Допустим, у вас 5000 строк для вставки, это займет около 6 минут (отдельная вставка для каждой записи). Лучше вставить данные с помощью одного запроса:
$values = '(null, "your string"), (null, "next string"), (null, "third string")'; $sql = 'INSERT INTO table_data (id, data) VALUES ' . $values; $command = Yii::app()->db->createCommand($sql); $command->execute();
Это займет 1/10 времени.
Вам лучше использовать bindParam для предотвращения инъекций SQL. Я не знаю, если это лучший способ сделать это, но есть способ, которым я это делаю:
$values = array(array(1,2),array(3,4),array(5,6),); $nbValues = count($values); $sql = 'INSERT INTO table_name (col_name1, col_name2) VALUES '; for ($i=0; $i < $nbValues; $i++) { $sql .= '(:col1_'.$i.', :col2_'.$i.')'; if ($i !== ($nbValues-1)) $sql .= ','; } $command = Yii::app()->db->createCommand($sql); for ($i=0; $i < $nbValues; $i++) { $command->bindParam(':col1_'.$i, $values[$i][0], PDO::PARAM_INT); $command->bindParam(':col2_'.$i, $values[$i][1], PDO::PARAM_INT); } $command->execute();
Надеюсь это поможет !
foreach($facilities as $facility) { $model = new Model; $model->attributes = $facility // or $model->column = $facility if ($model->validate()) $model->save() }
//only for 1.1.14 $builder = Yii::app()->db->schema->commandBuilder; $command=$builder->createMultipleInsertCommand('tbl_post', array( array('title' => 'record 1', 'text' => 'text1'), array('title' => 'record 2', 'text' => 'text2'), )); $command->execute();
http://www.yiiframework.com/news/72/yii-1-1-14-release-candidate-is-available/
Поскольку ваш вопрос помечен как «yii», я предполагаю, что вы используете Yii Framework. Взгляните на активные записи в документах – http://www.yiiframework.com/doc/guide/1.1/en/database.ar
Следуйте документам, чтобы настроить классы AR для своих таблиц, и просто перебирайте данные, которые вы публикуете, когда вы отправляете свой checkboxlist. В этом цикле вы создаете, заполняете и сохраняете AR-объекты для таблиц, для которых вы хотите вставить данные.