75 lines
3.4 KiB
PHP
75 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Carbon\Carbon;
|
|
|
|
class TrackSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
// SQL-запрос для проверки существования таблицы
|
|
$tableExists = DB::select("SHOW TABLES LIKE 'performers'");
|
|
|
|
if (empty($tableExists)) {
|
|
$this->command->error("Таблица 'performers' отсутствует в базе данных!");
|
|
}
|
|
|
|
// Очищаем таблицу перед заполнением
|
|
DB::table('tracks')->truncate();
|
|
|
|
// 1. Получаем ID исполнителей из базы по их именам
|
|
$rainbowId = DB::table('performers')->where('name', 'Rainbow')->value('id');
|
|
$blackSabbathId = DB::table('performers')->where('name', 'Black Sabbath')->value('id');
|
|
$dioId = DB::table('performers')->where('name', 'DIO')->value('id');
|
|
|
|
// Если сидер запускается отдельно и исполнителей нет, остановим процесс
|
|
if (!$rainbowId || !$blackSabbathId || !$dioId) {
|
|
$this->command->error('Исполнители не найдены в базе данных. Сначала запустите PerformerSeeder!');
|
|
return;
|
|
}
|
|
|
|
// 2. Список треков со связями
|
|
$tracksData = [
|
|
// Rainbow
|
|
['name' => 'Gates Of Babylon', 'performer_id' => $rainbowId],
|
|
['name' => 'Lady Of The Lake', 'performer_id' => $rainbowId],
|
|
['name' => 'Tarot Woman', 'performer_id' => $rainbowId],
|
|
['name' => 'Long Live Rock\'n\'Roll', 'performer_id' => $rainbowId],
|
|
['name' => 'Man On The Silver Mountain', 'performer_id' => $rainbowId],
|
|
['name' => 'Kill The King', 'performer_id' => $rainbowId],
|
|
['name' => 'Can\'t Let You Go', 'performer_id' => $rainbowId],
|
|
['name' => 'Rainbow\'s Eyes', 'performer_id' => $rainbowId],
|
|
['name' => 'Sixteen Century Greensleeves', 'performer_id' => $rainbowId],
|
|
|
|
// Black Sabbath
|
|
['name' => 'Neon Knights', 'performer_id' => $blackSabbathId],
|
|
['name' => 'Children Of The Sea', 'performer_id' => $blackSabbathId],
|
|
['name' => 'Heaven And Hell', 'performer_id' => $blackSabbathId],
|
|
|
|
// DIO
|
|
['name' => 'Holy Diver', 'performer_id' => $dioId],
|
|
['name' => 'Last In Line', 'performer_id' => $dioId],
|
|
['name' => 'All The Fools Sailed Away', 'performer_id' => $dioId],
|
|
['name' => 'One Night In The City', 'performer_id' => $dioId],
|
|
['name' => 'Straight Through The Heart', 'performer_id' => $dioId],
|
|
];
|
|
|
|
// 3. Подготовка данных (добавляем случайную длину и метки времени)
|
|
$now = Carbon::now();
|
|
foreach ($tracksData as &$track) {
|
|
$track['length'] = rand(180, 420); // Генерируем длину трека от 3 до 7 минут (в секундах)
|
|
$track['created_at'] = $now;
|
|
$track['updated_at'] = $now;
|
|
}
|
|
|
|
// 4. Массовая вставка в базу данных
|
|
DB::table('tracks')->insert($tracksData);
|
|
}
|
|
}
|