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