zend-blog-3-backend

Форк
0
131 строка · 4.2 Кб
1
<?php
2

3
namespace Mtt\TestBundle\DataFixtures\ORM;
4

5
use App\Entity\Comment;
6
use Doctrine\Bundle\FixturesBundle\Fixture;
7
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
8
use Doctrine\Common\Persistence\ObjectManager;
9
use Doctrine\DBAL\DBALException;
10
use Doctrine\Persistence\ObjectManager as ObjectManagerInterface;
11
use Faker\Factory as FakerFactory;
12
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
13
use Symfony\Component\DependencyInjection\ContainerInterface;
14

15
class LoadCommentData extends Fixture implements DependentFixtureInterface, ContainerAwareInterface
16
{
17
    const COUNT_COMMENTS = 450;
18

19
    /**
20
     * @var array
21
     */
22
    protected $commentPostRelation = [];
23

24
    /**
25
     * @var ContainerInterface
26
     */
27
    protected $container;
28

29
    /**
30
     * @param ContainerInterface $container
31
     */
32
    public function setContainer(ContainerInterface $container = null)
33
    {
34
        $this->container = $container;
35
    }
36

37
    /**
38
     * @param ObjectManager $manager
39
     *
40
     * @throws DBALException
41
     */
42
    public function load(ObjectManagerInterface $manager)
43
    {
44
        $faker = FakerFactory::create('ru_RU');
45
        $faker->seed(618230);
46

47
        $repository = $manager->getRepository(Comment::class);
48
        for ($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
            $comment
55
                ->setText($text)
56
                ->setIpAddress($faker->ipv4)
57
            ;
58

59
            if ($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);
76
            if ($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
     */
123
    public function getDependencies()
124
    {
125
        return [
126
            LoadCommentatorData::class,
127
            LoadPostData::class,
128
            LoadUserData::class,
129
        ];
130
    }
131
}
132

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.