Doctrine - 只用一个save()插入多行

时间:2011-03-24 06:51:58

标签: php database insert doctrine save

如何在 Doctrine 中将多行插入到调用save()方法的表中一次?

5 个答案:

答案 0 :(得分:31)

将每条记录添加到集合对象上的Doctrine_Collection调用save()

$collection = new Doctrine_Collection('tablename');
$collection->add($record1);
$collection->add($record2);
$collection->add($record3);
$collection->add($record4);
$collection->save();

仅当所有记录都针对同一个表时才有效。否则你运气不好。

答案 1 :(得分:3)

这是另一个在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();

答案 2 :(得分: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();

答案 3 :(得分:1)

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();

答案 4 :(得分:0)

我查看了" save"的代码。 Doctrine(1.2.x)" Collection.php"而我所看到的就是这样:

foreach ($this->getData() as $key => $record) {
   $record->save($conn);
}

如何使用一个mysql INSERT插入所有记录?