Skip to content

Instantly share code, notes, and snippets.

@KeKs0r
Created February 21, 2014 09:59
Show Gist options
  • Save KeKs0r/a3006768db267311bb35 to your computer and use it in GitHub Desktop.
Save KeKs0r/a3006768db267311bb35 to your computer and use it in GitHub Desktop.
Doctrine Bulk insert
<?php
// src/Acme/HelloBundle/DataFixtures/ORM/LoadUserData.php
namespace Strego\TippBundle\DataFixtures\ORM\Load\Append;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Strego\TippBundle\Entity\GameGroup;
use Strego\TippBundle\Entity\GameBet;
use Strego\TippBundle\Entity\BetRound;
use Strego\UserBundle\Entity\UserGroup;
use Strego\TippBundle\Entity\Game;
use Doctrine\ORM\Events;
class LoadMassUserData extends AbstractFixture implements ContainerAwareInterface {
public static $userNumber = 500;
public static $friendsNumber = 5;
public static $batchSize = 50;
/**
* @var \Symfony\Component\DependencyInjection\ContainerInterface $container
*/
private $container;
/**
* @param \Symfony\Component\DependencyInjection\ContainerInterface $container
*/
public function setContainer(ContainerInterface $container = null) {
$this->container = $container;
}
public function load(ObjectManager $em) {
// BetRound
print(PHP_EOL."Search for BetROund");
$betRounds = $em->getRepository('StregoTippBundle:BetRound')->findAll();
print(PHP_EOL.'found Betrrounds:'.count($betRounds));
$betRound = current($betRounds);
$userGroup = $betRound->getUserGroup();
$gameGroup = $betRound->getGameGroup();
print(PHP_EOL.'GameGroup Games:'.count($gameGroup->getGames()));
$userManager = $this->container->get('fos_user.user_manager');
$mySelf = $userManager->findUserByUsername('marc');
$userCount = count($betRound->getUsers());
print(PHP_EOL.'UserCount:'.$userCount);
// References
$betRoundRef = $em->getReference('Strego\\TippBundle\\Entity\\BetRound', $betRound->getId());
$gameRefs = array();
foreach($gameGroup->getGames() as $game){
$gameRefs[] = $em->getReference('Strego\\TippBundle\\Entity\\Game', $game->getId());
}
// User
print(PHP_EOL."User");
$mod = self::$userNumber / self::$friendsNumber;
$mod = floor($mod);
for ($i = 1; $i <= self::$userNumber; $i++) {
$id = $userCount + $i;
$genuser = $userManager->createUser();
$genuser->setFirstName('User'.$id);
$genuser->setLastName('Last');
$genuser->setNickName($genuser->getFirstName());
$genuser->setPlainPassword($genuser->getFirstName());
$genuser->setEmail($genuser->getFirstName().'@test.de');
$userGroup->addUser($genuser);
if(($i % $mod) == 0){
$genuser->addMyFriend($mySelf);
$mySelf->addMyFriend($genuser);
}
$em->persist($genuser);
foreach($gameRefs as $game){
$bet = new GameBet();
$bet->setBetround($betRoundRef);
$bet->setUser($genuser);
$bet->setGame($game);
$bet->setScoreT1($this->getScore());
$bet->setScoreT2($this->getScore());
$bet->recalculatePoints();
$em->persist($bet);
}
if(($i % self::$batchSize) == 0){
$em->persist($userGroup);
$em->persist($mySelf);
$em->flush();
$em->clear();
$em->merge($betRound);
$em->merge($userGroup);
$em->merge($mySelf);
}
}
$em->persist($userGroup);
$em->persist($mySelf);
$em->flush();
}
protected function getScore(){
return mt_rand(0, 3);
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment