-
-
Save KeKs0r/a3006768db267311bb35 to your computer and use it in GitHub Desktop.
Doctrine Bulk insert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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