¿Cómo inserto varias filas en la tabla llamando al método save()
una vez en Doctrine?Doctrine: inserte varias filas con solo una vez()
Respuesta
Agregue cada registro a Doctrine_Collection
la llamada save()
en el objeto de colección.
$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();
Esto solo funciona si todos los registros son para la misma tabla. De lo contrario, no tienes suerte.
Aquí otra solución, probada en Doctrine 1.2. No es necesario guardar cada registro, el flush() averigua automáticamente todas las instancias no guardadas y las guarda todas.
$row = new \My_Doctrine_Record();
$row->name = 'aaa';
$row->approved = 1;
/// ...
$row = new \My_Doctrine_Record();
$row->name = 'val';
$row->approved = 'bbb';
Doctrine_Manager::connection()->flush();
Estoy confundido. Usted dice que no hay necesidad de instanciar nuevos registros, pero eso es exactamente lo que está haciendo en su código cuando repetidamente dice '$ row = new My_Doctrine_Record();', ¿verdad? –
ops, quise decir "no es necesario guardar cada registro". Lo cambiaré –
Me tomó un vistazo en el código del método de "salvar" de la Doctrina (1.2.x) "Collection.php" y todo lo que vi es algo como esto:
foreach ($this->getData() as $key => $record) {
$record->save($conn);
}
Cómo ¿Debería esto insertar todos los registros con un mysql INSERT?
Su extracto en Collection.php está envuelto por '$ conn-> beginInternalTransaction()' y '$ conn-> commit()'. Eso podría explicarlo. – Tapper
Gracias por su comentario, pero por ejemplo: MySQL MyISAM no admite transacciones ... –
Si utiliza Symfony2 es tan fácil
// get the manager
$em = $this->getDoctrine()->getManager();
// enter the records
$em->persist($entitiy1);
$em->persist($entitiy2);
$em->persist($entitiy3);
$em->persist($entitiy4);
$em->persist($entitiy5);
// save the entries
$em->flush();
1) Declarar todas las mesas. 2) Crea el formulario. 3) Enviar a varias tablas. 4) Persistir datos.
use AppBundle\Entity\site;
use AppBundle\Entity\nba;
1) Declarar todas las mesas.
$site = new site;
$nba = new nba;
2) Crear forma
$form = $this->createFormBuilder($site)
->add('site_id', IntegerType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('category', ChoiceType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'), 'choices' => $output))
->add('team', ChoiceType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px'), 'choices' => $nbat))
->add('save', SubmitType::class, array('label' => "Create",'attr' => array('class' => 'btn btn-success', 'style' => 'margin-bottom:15px')))
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
3) Insertar en varias tablas.
{
$site_id = $form['site_id']->getData();
$category = $form['category']->getData();
$team = $form['team']->getData();
$site->setSiteId($site_id);
$site->setCategory($category);
$nba->setWinner($team);
4) conservar los datos
$em = $this->getDoctrine()->getManager();
$em->persist($site);
$em->persist($nba);
$em->flush();
- 1. Java: inserte varias filas en MySQL con PreparedStatement
- 2. PDO MySQL: inserte varias filas en una consulta
- 3. Inserte rápidamente 250k filas
- 4. Oracle SQL: inserte varias filas en una tabla con una declaración.
- 5. Insertar varias filas con una sola consulta
- 6. Cómo disparará el disparador en varias filas inserte en una sola transacción
- 7. Varias filas con jcarousel
- 8. ¿Cómo puedo resumir las filas que ocurren solo una vez?
- 9. ¿Actualizar varias filas con una consulta?
- 10. Actualizar varias filas con una consulta
- 11. Insertar varias filas con una sola consulta MySQL
- 12. ¿Cómo activar una función una vez, y solo una vez ...?
- 13. Actualizando varias filas con valores diferentes
- 14. layoutAnimation funciona solo una vez
- 15. SQL Server 2005: Insertar varias filas con una sola consulta
- 16. Insertar varias filas usando JdbcTemplate
- 17. Actualizar/Incrementar una sola columna en varias filas a la vez
- 18. Oracle combinar varias filas en una con título distinto
- 19. Mostrar div solo una vez
- 20. jQuery - Haz solo una vez
- 21. SQL dividir varias columnas en varias filas
- 22. seleccionar varias filas SQL en una fila
- 23. ¿Cómo elimino varias filas con diferentes ID?
- 24. Eliminación de varias filas con una sola consulta
- 25. ¿Es posible tener una selección sin tabla con varias filas?
- 26. concatenar varias filas en una matriz con SQL en PostgreSQL
- 27. MySql - ¿Insertar varias filas con una subconsulta unida?
- 28. Perl: actualizar varias filas con una llamada de MySQL
- 29. Dividir una columna en varias filas
- 30. Dividir varias columnas en varias filas
Gracias, exactamente lo que estaba buscando. –
¡Esto es perfecto! Insertar 1000 filas tomó solo 3.8s en vez de 76s. – Populus
¿Hay alguna forma de obtener insertar un registro primero y obtener su ID y agregar el resto e insertar todos los demás? – Pramod