Просмотр файла public/migrations/index.php

Размер файла: 8.81Kb
  1. <?php
  2.  
  3. use App\Models\Comment;
  4. use App\Models\File;
  5. use App\Models\Guestbook;
  6. use App\Models\Poll;
  7. use App\Models\Read;
  8. use App\Models\Story;
  9. use App\Models\Tag;
  10. use App\Models\User;
  11. use MotorORM\Migration;
  12.  
  13. error_reporting(E_ALL);
  14. ini_set('display_errors', '1');
  15. ini_set('display_startup_errors', '1');
  16.  
  17. require __DIR__ . '/../../vendor/autoload.php';
  18.  
  19. // Добавляет поля picture и avatar в users
  20. $userHeaders = User::query()->headers();
  21. if (! in_array('picture', $userHeaders, true)) {
  22. $migration = new Migration(new User());
  23.  
  24. try {
  25. $migration->column('picture')->after('name')->create();
  26. $migration->column('avatar')->after('picture')->create();
  27. } catch (Exception $exception) {
  28. echo $exception->getMessage();
  29. }
  30.  
  31. echo 'Добавлены поля picture и avatar в таблицу users<br>';
  32. }
  33.  
  34. // Добавляет поле user_id и удаляет login
  35. $guestbookHeaders = Guestbook::query()->headers();
  36. if (! in_array('user_id', $guestbookHeaders, true)) {
  37. $migration = new Migration(new Guestbook());
  38.  
  39. try {
  40. $migration->column('user_id')->after('id')->create();
  41.  
  42. $messages = Guestbook::query()->get();
  43. foreach ($messages as $message) {
  44. $user = User::query()->where('login', $message->login)->first();
  45. $message->where('id', $message->id)->update([
  46. 'user_id' => $user->id ?? '',
  47. ]);
  48. }
  49.  
  50. $migration->column('login')->delete();
  51. } catch (Exception $exception) {
  52. echo $exception->getMessage();
  53. }
  54.  
  55. echo 'Добавлено поле user_id в таблицу guestbook<br>';
  56. }
  57.  
  58. // Переносит image из guestbook в files
  59. $guestbookHeaders = Guestbook::query()->headers();
  60. if (in_array('image', $guestbookHeaders, true)) {
  61. $migration = new Migration(new Guestbook());
  62.  
  63. try {
  64. $messages = Guestbook::query()->get();
  65. foreach ($messages as $message) {
  66. if (! $message->image) {
  67. continue;
  68. }
  69.  
  70. File::query()->create([
  71. 'user_id' => $message->user_id,
  72. 'post_id' => $message->id,
  73. 'path' => $message->image,
  74. 'created_at' => $message->created_at,
  75. ]);
  76. }
  77.  
  78. $migration->column('image')->delete();
  79. } catch (Exception $exception) {
  80. echo $exception->getMessage();
  81. }
  82.  
  83. echo 'Поле image перенесено из таблицы guestbook в таблицу files<br>';
  84. }
  85.  
  86. // Добавляет поля name, ext и size в files
  87. $fileHeaders = File::query()->headers();
  88. if (! in_array('ext', $fileHeaders, true)) {
  89. $migration = new Migration(new File());
  90.  
  91. try {
  92. $migration->column('name')->after('path')->create();
  93. $migration->column('ext')->after('name')->create();
  94. $migration->column('size')->after('ext')->create();
  95.  
  96. $files = File::query()->get();
  97. foreach ($files as $file) {
  98. $file->where('id', $file->id)->update([
  99. 'name' => basename($file->path),
  100. 'ext' => getExtension($file->path),
  101. 'size' => filesize(publicPath($file->path)) ?? 0,
  102. ]);
  103. }
  104.  
  105. } catch (Exception $exception) {
  106. echo $exception->getMessage();
  107. }
  108.  
  109. echo 'Добавлены поля name, ext и size в таблицу files<br>';
  110. }
  111.  
  112. // Добавляет поле name и удаляет title из guestbook
  113. $guestbookHeaders = Guestbook::query()->headers();
  114. if (! in_array('name', $guestbookHeaders, true)) {
  115. $migration = new Migration(new Guestbook());
  116.  
  117. try {
  118. $migration->column('name')->after('text')->create();
  119. $migration->column('title')->delete();
  120. } catch (Exception $exception) {
  121. echo $exception->getMessage();
  122. }
  123.  
  124. echo 'Добавлено поле name и удалено title из таблицы guestbook<br>';
  125. }
  126.  
  127. // Добавляет поле rating в stories
  128. $storyHeaders = Story::query()->headers();
  129. if (! in_array('rating', $storyHeaders, true)) {
  130. $migration = new Migration(new Story());
  131.  
  132. try {
  133. $migration->column('rating')->after('tags')->default(0)->create();
  134. } catch (Exception $exception) {
  135. echo $exception->getMessage();
  136. }
  137.  
  138. echo 'Добавлено поле rating в таблицу stories<br>';
  139. }
  140.  
  141. // Переименовывает поле views в reads в stories
  142. $storyHeaders = Story::query()->headers();
  143. if (in_array('views', $storyHeaders, true)) {
  144. $migration = new Migration(new Story());
  145.  
  146. try {
  147. $migration->column('views')->to('reads')->rename();
  148. } catch (Exception $exception) {
  149. echo $exception->getMessage();
  150. }
  151.  
  152. echo 'Переименовано поле views на reads в таблице stories<br>';
  153. }
  154.  
  155. // Переименовывает поле post_id в story_id в comments
  156. $commentHeaders = Comment::query()->headers();
  157. if (in_array('post_id', $commentHeaders, true)) {
  158. $migration = new Migration(new Comment());
  159.  
  160. try {
  161. $migration->column('post_id')->to('story_id')->rename();
  162. } catch (Exception $exception) {
  163. echo $exception->getMessage();
  164. }
  165.  
  166. echo 'Переименовано поле post_id в story_id в таблице comments<br>';
  167. }
  168.  
  169. // Переименовывает поле post_id в story_id в files
  170. $fileHeaders = File::query()->headers();
  171. if (in_array('post_id', $fileHeaders, true)) {
  172. $migration = new Migration(new File());
  173.  
  174. try {
  175. $migration->column('post_id')->to('story_id')->rename();
  176. } catch (Exception $exception) {
  177. echo $exception->getMessage();
  178. }
  179.  
  180. echo 'Переименовано поле post_id в story_id в таблице files<br>';
  181. }
  182.  
  183. // Переименовывает поле post_id в story_id в polls
  184. $pollHeaders = Poll::query()->headers();
  185. if (in_array('post_id', $pollHeaders, true)) {
  186. $migration = new Migration(new Poll());
  187.  
  188. try {
  189. $migration->column('post_id')->to('story_id')->rename();
  190. } catch (Exception $exception) {
  191. echo $exception->getMessage();
  192. }
  193.  
  194. echo 'Переименовано поле post_id в story_id в таблице polls<br>';
  195. }
  196.  
  197. // Переименовывает поле post_id в story_id в reads
  198. $readHeaders = Read::query()->headers();
  199. if (in_array('post_id', $readHeaders, true)) {
  200. $migration = new Migration(new Read());
  201.  
  202. try {
  203. $migration->column('post_id')->to('story_id')->rename();
  204. } catch (Exception $exception) {
  205. echo $exception->getMessage();
  206. }
  207.  
  208. echo 'Переименовано поле post_id в story_id в таблице reads<br>';
  209. }
  210.  
  211. // Переименовывает поле story_id в entity_id в polls
  212. $pollHeaders = Poll::query()->headers();
  213. if (in_array('story_id', $pollHeaders, true)) {
  214. $migration = new Migration(new Poll());
  215.  
  216. try {
  217. $migration->column('story_id')->to('entity_id')->rename();
  218. } catch (Exception $exception) {
  219. echo $exception->getMessage();
  220. }
  221.  
  222. echo 'Переименовано поле story_id в entity_id в таблице polls<br>';
  223. }
  224.  
  225. // Добавляет поле entity_name в polls
  226. $pollHeaders = Poll::query()->headers();
  227. if (! in_array('entity_name', $pollHeaders, true)) {
  228. $migration = new Migration(new Poll());
  229.  
  230. try {
  231. $migration->column('entity_name')->after('entity_id')->default('story')->create();
  232. } catch (Exception $exception) {
  233. echo $exception->getMessage();
  234. }
  235.  
  236. echo 'Добавлено поле entity_name в таблицу polls<br>';
  237. }
  238.  
  239. // Добавляет поле locked в stories
  240. $storyHeaders = Story::query()->headers();
  241. if (! in_array('locked', $storyHeaders, true)) {
  242. $migration = new Migration(new Story());
  243.  
  244. try {
  245. $migration->column('locked')->after('reads')->default(0)->create();
  246. } catch (Exception $exception) {
  247. echo $exception->getMessage();
  248. }
  249.  
  250. echo 'Добавлено поле locked в таблицу stories<br>';
  251. }
  252.  
  253. // Удаляет поле tags в stories
  254. $storyHeaders = Story::query()->headers();
  255. if (in_array('tags', $storyHeaders, true)) {
  256. $migration = new Migration(new Story());
  257.  
  258. try {
  259. $migration->column('tags')->to('tags_old')->rename();
  260.  
  261. $stories = Story::query()->get();
  262. foreach ($stories as $story) {
  263. $tags = explode(',', $story->tags_old);
  264.  
  265. foreach ($tags as $tag) {
  266. if (! $tag) {
  267. continue;
  268. }
  269.  
  270. Tag::query()->create([
  271. 'story_id' => $story->id,
  272. 'tag' => $tag,
  273. ]);
  274. }
  275. }
  276.  
  277. $migration->column('tags_old')->delete();
  278. } catch (Exception $exception) {
  279. echo $exception->getMessage();
  280. }
  281.  
  282. echo 'Удалено поле tags из таблицы stories<br>';
  283. }
  284.  
  285.  
  286. echo 'Все миграции выполнены успешно!<br>';