@@ -59,95 +59,64 @@ public function down(Schema $schema): void
5959 $ this ->addSql ('DROP SEQUENCE swp_article_extra_id_seq CASCADE ' );
6060 $ this ->addSql ('DROP TABLE swp_article_extra ' );
6161 }
62+
6263 public function postUp (Schema $ schema ): void
6364 {
64- try {
65- $ entityManager = $ this ->container ->get ('doctrine.orm.default_entity_manager ' );
66- $ connection = $ entityManager ->getConnection ();
67- $ connection ->getConfiguration ()->setSQLLogger (null );
68-
69- // Verify table exists
70- $ tableExists = $ connection ->executeQuery (
71- "SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'swp_article_extra') "
72- )->fetchOne ();
73-
74- if (!$ tableExists ) {
75- return ;
76- }
77-
78- $ batchSize = 500 ;
79- $ numberOfRecordsPerPage = 2000 ;
80-
81- // Get total count
82- $ totalArticles = $ entityManager
83- ->createQuery ('SELECT count(a) FROM SWP\Bundle\CoreBundle\Model\Article a WHERE a.extra IS NOT NULL ' )
84- ->getSingleScalarResult ();
85-
86- if ($ totalArticles == 0 ) {
87- return ;
88- }
89-
90- $ totalArticlesProcessed = 0 ;
65+ $ entityManager = $ this ->container ->get ('doctrine.orm.default_entity_manager ' );
66+ $ entityManager ->getConnection ()->getConfiguration ()->setSQLLogger (null );
67+
68+ $ batchSize = 500 ;
69+ $ numberOfRecordsPerPage = 2000 ;
70+
71+ $ totalArticles = $ entityManager
72+ ->createQuery ('SELECT count(a) FROM SWP\Bundle\CoreBundle\Model\Article a ' )
73+ ->getSingleScalarResult ();
74+
75+ $ totalArticlesProcessed = 0 ;
76+ $ isProcessing = true ;
77+
78+ // while ($totalArticlesProcessed < $totalArticles) {
79+ $ sql = "SELECT id, extra FROM swp_article " ;
80+ $ query = $ entityManager ->getConnection ()->prepare ($ sql );
81+ $ query ->execute ();
82+ $ results = $ query ->fetchAll ();
83+
84+ foreach ($ results as $ result ) {
85+ $ legacyExtra = $ this ->unserializeExtraField ($ result ['extra ' ]);
86+ if (empty ($ legacyExtra )) {
87+ ++$ totalArticlesProcessed ;
88+ continue ;
89+ }
9190
92- // Pagination loop
93- while ($ totalArticlesProcessed < $ totalArticles ) {
94- $ sql = "SELECT id, extra FROM swp_article WHERE extra IS NOT NULL ORDER BY id LIMIT ? OFFSET ? " ;
95- $ query = $ connection ->prepare ($ sql );
96- $ results = $ query ->executeQuery ([$ numberOfRecordsPerPage , $ totalArticlesProcessed ])->fetchAllAssociative ();
91+ $ article = $ entityManager ->find (
92+ Article::class,
93+ $ result ['id ' ]
94+ );
9795
98- // Break if no results (end of data)
99- if (empty ($ results )) {
100- break ;
96+ foreach ($ legacyExtra as $ key => $ extraItem ) {
97+ if (is_array ($ extraItem )) {
98+ $ extra = ArticleExtraEmbedField::newFromValue ($ key , $ extraItem );
99+ } else {
100+ $ extra = ArticleExtraTextField::newFromValue ($ key , (string ) $ extraItem );
101+ }
102+ $ extra ->setArticle ($ article );
103+ $ entityManager ->persist ($ extra );
101104 }
102105
103- foreach ($ results as $ result ) {
104- try {
105- $ legacyExtra = $ this ->unserializeExtraField ($ result ['extra ' ]);
106- if (empty ($ legacyExtra )) {
107- ++$ totalArticlesProcessed ;
108- continue ;
109- }
110-
111- $ article = $ entityManager ->find (
112- Article::class,
113- $ result ['id ' ]
114- );
115-
116- if (!$ article ) {
117- ++$ totalArticlesProcessed ;
118- continue ;
119- }
120-
121- foreach ($ legacyExtra as $ key => $ extraItem ) {
122- if (is_array ($ extraItem )) {
123- $ extra = ArticleExtraEmbedField::newFromValue ($ key , $ extraItem );
124- } else {
125- $ extra = ArticleExtraTextField::newFromValue ($ key , (string ) $ extraItem );
126- }
127- $ extra ->setArticle ($ article );
128- $ entityManager ->persist ($ extra );
129- }
130-
131- ++$ totalArticlesProcessed ;
132- if (0 == ($ totalArticlesProcessed % $ batchSize )) {
133- $ entityManager ->flush ();
134- $ entityManager ->clear ();
135- }
136- } catch (\Exception $ e ) {
137- ++$ totalArticlesProcessed ;
138- error_log ('Error processing article ' . $ result ['id ' ] . ': ' . $ e ->getMessage ());
139- continue ;
140- }
106+ ++$ totalArticlesProcessed ;
107+ if (0 == ($ totalArticlesProcessed % $ batchSize )) {
108+ $ entityManager ->flush ();
109+ $ entityManager ->clear ();
141110 }
142111 }
143112
144- // Flush remaining entities
145- $ entityManager -> flush ();
146- $ entityManager ->clear ();
147- } catch ( \ Exception $ e ) {
148- error_log ( ' postUp error: ' . $ e -> getMessage ()) ;
149- throw $ e ;
150- }
113+ // flush remaining entities in queue and break loop
114+ if ( $ totalArticlesProcessed === $ totalArticles ) {
115+ $ entityManager ->flush ();
116+ $ entityManager -> clear ();
117+ break ;
118+ }
119+ // }
151120 }
152121
153122 private function unserializeExtraField (?string $ data )
0 commit comments