Symfony - update multiple records

后端 未结 2 1073
执笔经年
执笔经年 2020-12-17 19:32

What is the best way to update multiple records in database using doctrine, symfony2?

I receive array of records ids which I have to update.
I want to assign to

相关标签:
2条回答
  • 2020-12-17 20:14

    Something like...

    foreach ($repo->findById($ids) as $obj) {
        $obj->setOrder(array_search($obj->getId(), $ids));
    }
    
    $em->flush();
    
    0 讨论(0)
  • 2020-12-17 20:33

    So this is still 0(n), but it's 1n rather than 2n. To avoid the unnecessary selects, I solved this problem using a custom repository class and the doctrine query builder like so:

    namespace BRS\PageBundle\Repository;
    
    use Doctrine\ORM\EntityRepository;
    
    class ContentRepository extends EntityRepository
    {
        public function reorder($content)
        {    
            $em = $this->getEntityManager();
    
            $count = 0;
    
            foreach($content as $i => $content_id){
    
                $q = $em->createQuery('update BRSPageBundle:Content c set c.display_order = ?1 where c.id = ?2')
                        ->setParameter(1, $i)
                        ->setParameter(2, $content_id);
    
                $count += $q->execute();
            }
    
            return $count;
        }
    }
    

    then say you have an array of content ids in order like this:

    $content = array(23,12,8,4);
    

    Then you can update the order from your controller pretty simply:

    $count = $this->getRepository('BRSPageBundle:Content')->reorder($content);
    
    0 讨论(0)
提交回复
热议问题