Doctrine-insérer plusieurs rangées avec une seule sauvegarde()
Comment puis-je insérer plusieurs lignes dans la table appelant save()
méthode une fois dans Doctrine?
5 réponses
Ajouter chaque enregistrement d'un Doctrine_Collection
l'appel save()
sur l'objet collection.
$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();
cela ne fonctionne que si tous les enregistrements sont pour la même table. Sinon, vous êtes hors de la chance.
Voici une autre solution, testée sur la Doctrine 1.2. Pas besoin de sauvegarder chaque enregistrement, flush() découvre automatiquement toutes les instances non sauvegardées et les sauve toutes.
$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();
si vous utilisez symfony2 c'est tellement facile
// 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)déclarer toutes les tables. 2)Créer le formulaire. 3) Envoyer à plusieurs tables. 4) données sur la persistance.
use AppBundle\Entity\site;
use AppBundle\Entity\nba;
1)déclarer toutes les tables.
$site = new site;
$nba = new nba;
2)Créer un formulaire
$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)Insérer dans plusieurs tableaux.
{
$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)données persistantes
$em = $this->getDoctrine()->getManager();
$em->persist($site);
$em->persist($nba);
$em->flush();
j'ai jeté un coup d'oeil au code de la méthode "save" De La Doctrine (1.2.x) "de la Collection.php" et tout ce que j'ai vu est quelque chose comme ceci:
foreach ($this->getData() as $key => $record) {
$record->save($conn);
}
comment cela devrait-il JAMAIS insérer tous les enregistrements avec un INSERT mysql?