Add migrations for collection improvements

This commit is contained in:
Timothy Warren 2020-04-23 18:54:54 -04:00
parent 209655adc3
commit d81fba030c
2 changed files with 57 additions and 2 deletions

View File

@ -23,7 +23,9 @@ class ReorganizeAnimeCollectionMedia extends AbstractMigration
// Get the old link entries
$insertRows = [];
$rows = $this->fetchAll('SELECT hummingbird_id, media_id from anime_set');
$rows = ($this->table('anime_set')->hasColumn('media_id'))
? $this->fetchAll('SELECT hummingbird_id, media_id from anime_set')
: [];
// Filter the numeric keys out of the row results
foreach ($rows as $row)
@ -39,7 +41,6 @@ class ReorganizeAnimeCollectionMedia extends AbstractMigration
$insertRows[] = $row;
}
// And put them in the new table
$linkTable = $this->table('anime_set_media_link');
$linkTable->insert($insertRows)->save();

View File

@ -0,0 +1,54 @@
<?php
use Phinx\Migration\AbstractMigration;
class AnimeCollectionRefactorCleanup extends AbstractMigration
{
protected array $newMediaTypes = [
'LaserDisc',
'VHS',
'Digital',
'Video CD',
'Betamax',
'UMD',
'Other',
];
public function up()
{
// Add some new media types
$moreMediaTypes = [];
foreach ($this->newMediaTypes as $id => $medium)
{
$moreMediaTypes[] = [
'id' => $id + 5,
'type' => $medium,
];
}
$this->table('media')->insert($moreMediaTypes)->save();
// Cleanup existing media types a bit
$this->execute("UPDATE media SET type='Bootleg' WHERE id=4");
$this->execute('DELETE FROM media WHERE id=1');
// Remove foreign key and media_id column from anime_set
$animeSet = $this->table('anime_set');
if ($animeSet->hasColumn('media_id'))
{
$animeSet->dropForeignKey('media_id')->save();
$animeSet->removeColumn('media_id')->save();
}
}
public function down()
{
// Restore the original values for existing media
$this->execute("INSERT INTO media (id, type) VALUES (1, 'DVD & Blu-ray')");
$this->execute("UPDATE media SET type='Bootleg DVD' WHERE id=4");
// Remove the new media types
$values = array_map(fn ($medium) => "'{$medium}'", $this->newMediaTypes);
$valueList = implode(',', $values);
$this->execute("DELETE FROM media WHERE type IN ({$valueList})");
}
}