Ich frage mich, wie Sie eine Bulk-Datenbank INSERT
in Yii2
tun?Wie mache ich eine Bulk-Datenbank einfügen in Yii2?
Zum Beispiel eines normalen INSERT
ich so mochte:
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES(:id,:my_value)");
$sql->bindValues([':id' => $id, ':my_value' => $my_value]);
$sql->execute();
Was nun, wenn ich einen Großteil INSERT
schaffen wollte?
Ohne Werte konnte man es so etwas wie Bindung:
foreach ($foo as $bar) {
$data_sql .= '(' . $id . ',' "'" . $bar . "'),"
}
$data_sql = rtrim($data_sql, ',');
$sql = $this->db("INSERT INTO some_table(id,my_value) VALUES" . $data_sql);
$sql->execute();
Aber wie kann man dies erreichen, wenn Sie immer noch die Werte binden möchten?
Bearbeiten: Diese Frage ist nicht das gleiche wie die verknüpfte, da ich nicht verwende.
Edit 2:
Im Idealfall wäre es gut, wenn es eine Lösung, die eine gewisse Flexibilität angeboten, wie zum Beispiel der Lage, die meisten Ihrer eigenen Syntax, als eine der Antworten unten geschrieben zu schreiben:
Yii::$app->db->createCommand()->batchInsert('tableName', ['id', 'title', 'created_at'], [
[1, 'title1', '2015-04-10'],
[2, 'title2', '2015-04-11'],
[3, 'title3', '2015-04-12'],
])->execute();
... bietet das nicht an. Für diese spezielle Situation muss ich die IGNORE
Anweisung verwenden, die die obige Lösung nicht bietet.
etwas wie INTO some_table Erstellen 'INSERT (id, my_value) VALUES (? ?,), (?,?) 'und Platzhalter füllen? –
Nun, ich hatte daran gedacht, etwas Ähnliches zu tun, indem ich Zahlen an das Ende jedes Platzhalters anfügte, aber ich hoffte, dass es einen besseren Weg gab. – Brett
möglich Duplikat von [ActiveRecord Batch einfügen (yii2)] (http://stackoverflow.com/questions/27355262/activerecord-batch-insert-yii2) – arogachev