Как вставить несколько строк в метод вызова table save()
метод Doctrine ?
Добавьте каждую запись в Doctrine_Collection
вызов save()
в объект коллекции.
$collection = new Doctrine_Collection('tablename'); $collection->add($record1); $collection->add($record2); $collection->add($record3); $collection->add($record4); $collection->save();
Это работает, только если все записи относятся к одной таблице. В противном случае вам не повезло.
Здесь другое решение, протестированное на Доктрине 1.2. Нет необходимости сохранять каждую запись, flush () автоматически обнаруживает все несохраненные экземпляры и сохраняет их все.
$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();
Если вы используете symfony2, это так просто
// 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) Объявите все таблицы. 2) Создайте форму. 3) Отправка на несколько таблиц. 4) Сохранять данные.
use AppBundle\Entity\site; use AppBundle\Entity\nba;
1) Объявите все таблицы.
$site = new site; $nba = new nba;
2) Создать форму
$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) Вставка в несколько таблиц.
{ $site_id = $form['site_id']->getData(); $category = $form['category']->getData(); $team = $form['team']->getData(); $site->setSiteId($site_id); $site->setCategory($category); $nba->setWinner($team);
-{ $site_id = $form['site_id']->getData(); $category = $form['category']->getData(); $team = $form['team']->getData(); $site->setSiteId($site_id); $site->setCategory($category); $nba->setWinner($team);
-{ $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) Сохранять данные
$em = $this->getDoctrine()->getManager(); $em->persist($site); $em->persist($nba); $em->flush();
Я взглянул на код метода «save» в Doctrine (1.2.x) «Collection.php», и все, что я увидел, выглядит примерно так:
foreach ($this->getData() as $key => $record) { $record->save($conn); }
Как это всегда вставлять все записи с помощью одного mysql INSERT?