zend-blog-3-backend
131 строка · 4.2 Кб
1<?php
2
3namespace Mtt\TestBundle\DataFixtures\ORM;4
5use App\Entity\Comment;6use Doctrine\Bundle\FixturesBundle\Fixture;7use Doctrine\Common\DataFixtures\DependentFixtureInterface;8use Doctrine\Common\Persistence\ObjectManager;9use Doctrine\DBAL\DBALException;10use Doctrine\Persistence\ObjectManager as ObjectManagerInterface;11use Faker\Factory as FakerFactory;12use Symfony\Component\DependencyInjection\ContainerAwareInterface;13use Symfony\Component\DependencyInjection\ContainerInterface;14
15class LoadCommentData extends Fixture implements DependentFixtureInterface, ContainerAwareInterface16{
17const COUNT_COMMENTS = 450;18
19/**20* @var array
21*/
22protected $commentPostRelation = [];23
24/**25* @var ContainerInterface
26*/
27protected $container;28
29/**30* @param ContainerInterface $container
31*/
32public function setContainer(ContainerInterface $container = null)33{34$this->container = $container;35}36
37/**38* @param ObjectManager $manager
39*
40* @throws DBALException
41*/
42public function load(ObjectManagerInterface $manager)43{44$faker = FakerFactory::create('ru_RU');45$faker->seed(618230);46
47$repository = $manager->getRepository(Comment::class);48for ($i = 0; $i < self::COUNT_COMMENTS; $i++) {49$comment = new Comment();50
51$text = $faker->realText($faker->numberBetween(30, 200));52$text = iconv('UTF-8', 'UTF-8//IGNORE', $text);53
54$comment55->setText($text)56->setIpAddress($faker->ipv4)57;58
59if ($faker->numberBetween(0, 100) < 25) {60$comment->setUser(61$manager->merge(62$this->getReference('user-' . $faker->numberBetween(1, LoadUserData::COUNT_USERS))63)64);65} else {66$comment->setCommentator(67$manager->merge(68$this->getReference(69'commentator-' . $faker->numberBetween(1, 1 + LoadCommentatorData::COUNT_COMMENTATORS)70)71)72);73}74
75$commentKey = 'comment-' . (string)($i + 1);76if ($i > 20 && $faker->numberBetween(0, 100) < 25) {77$parentCommentKey = 'comment-' . $faker->numberBetween(1, $i);78$parent = $this->getReference($parentCommentKey);79$manager->refresh($parent);80$comment->setParent($manager->merge($parent));81
82$postKey = $this->commentPostRelation[$parentCommentKey];83} else {84$postKey = 'post-' . $faker->numberBetween(1, 4 + LoadPostData::COUNT_POSTS);85}86
87$this->commentPostRelation[$commentKey] = $postKey;88$comment->setPost($manager->merge($this->getReference($postKey)));89
90$repository->save($comment);91
92$this->addReference($commentKey, $comment);93}94
95$comment = new Comment();96$comment->setText('Тестовый комментарий')97->setIpAddress('94.231.112.91')98->setPost($manager->merge($this->getReference('post-1')))99->setCommentator($manager->merge($this->getReference('commentator-1')));100
101$repository->save($comment);102
103$comment2 = new Comment();104$comment2->setText('Ответ на тестовый комментарий')105->setIpAddress('62.72.188.111')106->setPost($manager->merge($this->getReference('post-1')))107->setUser($manager->merge($this->getReference('admin-user')))108->setParent($comment);109
110$repository->save($comment2);111
112/* @var \Doctrine\ORM\EntityManager $em */113$em = $this->container->get('doctrine.orm.entity_manager');114$conn = $em->getConnection();115
116$stmt = $conn->prepare('CALL update_all_comments_count()');117$stmt->executeQuery();118}119
120/**121* @return array
122*/
123public function getDependencies()124{125return [126LoadCommentatorData::class,127LoadPostData::class,128LoadUserData::class,129];130}131}
132