Tables migration, seeders, db dump, README.md
This commit is contained in:
@@ -0,0 +1,98 @@
|
|||||||
|
-- MySQL dump 10.13 Distrib 9.7.0, for Linux (x86_64)
|
||||||
|
--
|
||||||
|
-- Host: localhost Database: test_fhr
|
||||||
|
-- ------------------------------------------------------
|
||||||
|
-- Server version 9.7.0
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!50503 SET NAMES utf8mb4 */;
|
||||||
|
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||||
|
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||||
|
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||||
|
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
|
||||||
|
SET @@SESSION.SQL_LOG_BIN= 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- GTID state at the beginning of the backup
|
||||||
|
--
|
||||||
|
|
||||||
|
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '508e7ea7-63f5-11f1-9d13-5242ca7f4bf5:1-285';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `clubs`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `clubs`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!50503 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `clubs` (
|
||||||
|
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`name_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`name_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`city_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`city_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`created_at` timestamp NULL DEFAULT NULL,
|
||||||
|
`updated_at` timestamp NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `clubs`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `clubs` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `clubs` DISABLE KEYS */;
|
||||||
|
INSERT INTO `clubs` VALUES (1,'Металлург','Metallurg','Магнитогорск','Magnitogorsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(2,'Северсталь','Severstal','Сочи','Sochi','2026-06-09 14:08:31','2026-06-09 14:08:31'),(3,'Сибирь','Sibir','Санкт-Петербург','St. Petersburg','2026-06-09 14:08:31','2026-06-09 14:08:31'),(4,'Спартак','Spartak','Тольятти','Tolyatti','2026-06-09 14:08:31','2026-06-09 14:08:31'),(5,'Сочи','Sochi','Астана','Astana','2026-06-09 14:08:31','2026-06-09 14:08:31'),(6,'Салават Юлаев','Salavat Yulaev','Уфа','Ufa','2026-06-09 14:08:31','2026-06-09 14:08:31'),(7,'Металлург','Metallurg','Новосибирск','Novosibirsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(8,'Салават Юлаев','Salavat Yulaev','Хабаровск','Khabarovsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(9,'Металлург','Metallurg','Тольятти','Tolyatti','2026-06-09 14:08:31','2026-06-09 14:08:31'),(10,'СКА','SKA','Владивосток','Vladivostok','2026-06-09 14:08:31','2026-06-09 14:08:31'),(11,'Динамо','Dynamo','Владивосток','Vladivostok','2026-06-09 14:08:31','2026-06-09 14:08:31'),(12,'Ак Барс','Ak Bars','Санкт-Петербург','St. Petersburg','2026-06-09 14:08:31','2026-06-09 14:08:31');
|
||||||
|
/*!40000 ALTER TABLE `clubs` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `players`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `players`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!50503 SET character_set_client = utf8mb4 */;
|
||||||
|
CREATE TABLE `players` (
|
||||||
|
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`full_name_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`full_name_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`weight` int unsigned NOT NULL,
|
||||||
|
`height` int unsigned NOT NULL,
|
||||||
|
`squad_number` tinyint NOT NULL,
|
||||||
|
`club_id` bigint unsigned NOT NULL,
|
||||||
|
`created_at` timestamp NULL DEFAULT NULL,
|
||||||
|
`updated_at` timestamp NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `players_club_id_squad_number_unique` (`club_id`,`squad_number`),
|
||||||
|
CONSTRAINT `players_club_id_foreign` FOREIGN KEY (`club_id`) REFERENCES `clubs` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Dumping data for table `players`
|
||||||
|
--
|
||||||
|
|
||||||
|
LOCK TABLES `players` WRITE;
|
||||||
|
/*!40000 ALTER TABLE `players` DISABLE KEYS */;
|
||||||
|
INSERT INTO `players` VALUES (1,'Данис Зарипов','Danis Zaripov',72,172,45,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(2,'Илья Брызгалов','Ilya Bryzgalov',73,168,89,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(3,'Александр Семин','Alexander Semin',102,163,43,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(4,'Василий Подколзин','Vasily Podkolzin',96,173,94,11,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(5,'Егор Чинахов','Yegor Chinakhov',85,187,13,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(6,'Александр Георгиев','Alexandar Georgiev',97,172,97,8,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(7,'Александр Еременко','Alexander Yeryomenko',70,189,35,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(8,'Павел Бучневич','Pavel Buchnevich',96,190,61,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(9,'Антон Худобин','Anton Khudobin',85,199,5,4,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(10,'Александр Еременко','Alexander Yeryomenko',82,173,91,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(11,'Даниил Мироманов','Daniil Miromanov',100,177,22,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(12,'Александр Степанов','Alexander Stepanov',89,208,83,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(13,'Евгений Малкин','Evgeni Malkin',86,179,12,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(14,'Николай Хабибулин','Nikolai Khabibulin',94,203,71,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(15,'Александр Могильный','Alexander Mogilny',101,166,91,5,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(16,'Михаил Сергачев','Mikhail Sergachev',86,183,37,1,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(17,'Илья Ковальчук','Ilya Kovalchuk',68,171,10,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(18,'Николай Кулемин','Nikolay Kulemin',78,205,58,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(19,'Максим Сушинский','Maxim Sushinsky',70,164,66,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(20,'Евгений Кузнецов','Evgeny Kuznetsov',79,196,94,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(21,'Иван Проворов','Ivan Provorov',101,209,93,1,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(22,'Даниил Тарасов','Daniil Tarasov',96,181,78,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(23,'Сергей Светлов','Sergei Svetlov',85,163,69,6,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(24,'Илья Никулин','Ilya Nikulin',67,172,51,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(25,'Павел Бучневич','Pavel Buchnevich',90,170,68,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(26,'Семен Варламов','Semyon Varlamov',70,173,78,5,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(27,'Александр Гусев','Alexander Gusev',82,177,93,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(28,'Андрей Свечников','Andrei Svechnikov',67,194,5,7,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(29,'Валерий Васильев','Valeri Vasiliev',81,175,48,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(30,'Александр Овечкин','Alexander Ovechkin',91,198,2,4,'2026-06-09 14:08:35','2026-06-09 14:08:35');
|
||||||
|
/*!40000 ALTER TABLE `players` ENABLE KEYS */;
|
||||||
|
UNLOCK TABLES;
|
||||||
|
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
|
||||||
|
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||||
|
|
||||||
|
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||||
|
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
|
-- Dump completed on 2026-06-09 14:09:19
|
||||||
@@ -17,6 +17,10 @@
|
|||||||
For Linux env:
|
For Linux env:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
mkdir ilya_test
|
||||||
|
cd ilya_test
|
||||||
|
git clone https://gitea.wired-mind.ru/ijin82/test-FHR.git .
|
||||||
|
cp main-repo/.env.example main-repo/.env
|
||||||
docker compose up
|
docker compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -46,3 +50,28 @@ php artisan app:test-fhr-sort
|
|||||||
Конечно это решение я в голове не носил, а достал его из гугла.
|
Конечно это решение я в голове не носил, а достал его из гугла.
|
||||||
|
|
||||||
**Время: 25 минут.**
|
**Время: 25 минут.**
|
||||||
|
|
||||||
|
### Игроки и клубы, миграции, сидирование, выгрузка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
fhr-php
|
||||||
|
|
||||||
|
php artisan migrate # Структура БД
|
||||||
|
|
||||||
|
# Клубы
|
||||||
|
php artisan db:seed --class=ClubSeeder
|
||||||
|
# Игроки
|
||||||
|
php artisan db:seed --class=PlayerSeeder
|
||||||
|
```
|
||||||
|
|
||||||
|
Выгрузка данных по игрокам и клубам вместе со структурой
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /var/lib/mysql-files
|
||||||
|
mysqldump -u root -psecret test_fhr clubs players > clubs_and_players_dump.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
После такой выгрузки, дамп появится в папке MySQL-files
|
||||||
|
Тестовый дамп лежит в корне проекта **clubs_and_players_dump.sql**
|
||||||
|
|
||||||
|
**Время: 1 час 25 минут.**
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Club extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Player extends Model
|
||||||
|
{
|
||||||
|
use HasFactory;
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
|
use App\Models\Club;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends Factory<Club>
|
||||||
|
*/
|
||||||
|
class ClubFactory extends Factory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Define the model's default state.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function definition(): array
|
||||||
|
{
|
||||||
|
$clubs = [
|
||||||
|
['ru' => 'Ак Барс', 'en' => 'Ak Bars'],
|
||||||
|
['ru' => 'Авангард', 'en' => 'Avangard'],
|
||||||
|
['ru' => 'Салават Юлаев', 'en' => 'Salavat Yulaev'],
|
||||||
|
['ru' => 'СКА', 'en' => 'SKA'],
|
||||||
|
['ru' => 'ЦСКА', 'en' => 'CSKA'],
|
||||||
|
['ru' => 'Металлург', 'en' => 'Metallurg'],
|
||||||
|
['ru' => 'Динамо', 'en' => 'Dynamo'],
|
||||||
|
['ru' => 'Локомотив', 'en' => 'Lokomotiv'],
|
||||||
|
['ru' => 'Трактор', 'en' => 'Traktor'],
|
||||||
|
['ru' => 'Автомобилист', 'en' => 'Avtomobilist'],
|
||||||
|
['ru' => 'Торпедо', 'en' => 'Torpedo'],
|
||||||
|
['ru' => 'Спартак', 'en' => 'Spartak'],
|
||||||
|
['ru' => 'Северсталь', 'en' => 'Severstal'],
|
||||||
|
['ru' => 'Амур', 'en' => 'Amur'],
|
||||||
|
['ru' => 'Адмирал', 'en' => 'Admiral'],
|
||||||
|
['ru' => 'Сибирь', 'en' => 'Sibir'],
|
||||||
|
['ru' => 'Барыс', 'en' => 'Barys'],
|
||||||
|
['ru' => 'Нефтехимик', 'en' => 'Neftekhimik'],
|
||||||
|
['ru' => 'Куньлунь Ред Стар', 'en' => 'Kunlun Red Star'],
|
||||||
|
['ru' => 'Витязь', 'en' => 'Vityaz'],
|
||||||
|
['ru' => 'Сочи', 'en' => 'Sochi'],
|
||||||
|
['ru' => 'Лада', 'en' => 'Lada'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$cities = [
|
||||||
|
['ru' => 'Москва', 'en' => 'Moscow'],
|
||||||
|
['ru' => 'Санкт-Петербург', 'en' => 'St. Petersburg'],
|
||||||
|
['ru' => 'Казань', 'en' => 'Kazan'],
|
||||||
|
['ru' => 'Омск', 'en' => 'Omsk'],
|
||||||
|
['ru' => 'Уфа', 'en' => 'Ufa'],
|
||||||
|
['ru' => 'Магнитогорск', 'en' => 'Magnitogorsk'],
|
||||||
|
['ru' => 'Ярославль', 'en' => 'Yaroslavl'],
|
||||||
|
['ru' => 'Челябинск', 'en' => 'Chelyabinsk'],
|
||||||
|
['ru' => 'Екатеринбург', 'en' => 'Yekaterinburg'],
|
||||||
|
['ru' => 'Нижний Новгород', 'en' => 'Nizhny Novgorod'],
|
||||||
|
['ru' => 'Череповец', 'en' => 'Cherepovets'],
|
||||||
|
['ru' => 'Хабаровск', 'en' => 'Khabarovsk'],
|
||||||
|
['ru' => 'Владивосток', 'en' => 'Vladivostok'],
|
||||||
|
['ru' => 'Новосибирск', 'en' => 'Novosibirsk'],
|
||||||
|
['ru' => 'Астана', 'en' => 'Astana'],
|
||||||
|
['ru' => 'Нижнекамск', 'en' => 'Nizhnekamsk'],
|
||||||
|
['ru' => 'Пекин', 'en' => 'Beijing'],
|
||||||
|
['ru' => 'Подольск', 'en' => 'Podolsk'],
|
||||||
|
['ru' => 'Сочи', 'en' => 'Sochi'],
|
||||||
|
['ru' => 'Тольятти', 'en' => 'Tolyatti'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$club = $clubs[array_rand($clubs)];
|
||||||
|
$city = $cities[array_rand($cities)];
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name_ru' => $club['ru'],
|
||||||
|
'name_en' => $club['en'],
|
||||||
|
'city_ru' => $city['ru'],
|
||||||
|
'city_en' => $city['en'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
|
use App\Models\Player;
|
||||||
|
use App\Models\Club;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends Factory<Player>
|
||||||
|
*/
|
||||||
|
class PlayerFactory extends Factory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Define the model's default state.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function definition(): array
|
||||||
|
{
|
||||||
|
$names = [
|
||||||
|
['ru' => 'Александр Овечкин', 'en' => 'Alexander Ovechkin'],
|
||||||
|
['ru' => 'Евгений Малкин', 'en' => 'Evgeni Malkin'],
|
||||||
|
['ru' => 'Никита Кучеров', 'en' => 'Nikita Kucherov'],
|
||||||
|
['ru' => 'Артемий Панарин', 'en' => 'Artemi Panarin'],
|
||||||
|
['ru' => 'Андрей Василевский', 'en' => 'Andrei Vasilevskiy'],
|
||||||
|
['ru' => 'Илья Ковальчук', 'en' => 'Ilya Kovalchuk'],
|
||||||
|
['ru' => 'Павел Дацюк', 'en' => 'Pavel Datsyuk'],
|
||||||
|
['ru' => 'Владимир Тарасенко', 'en' => 'Vladimir Tarasenko'],
|
||||||
|
['ru' => 'Сергей Бобровский', 'en' => 'Sergei Bobrovsky'],
|
||||||
|
['ru' => 'Кирилл Капризов', 'en' => 'Kirill Kaprizov'],
|
||||||
|
['ru' => 'Игорь Шестеркин', 'en' => 'Igor Shesterkin'],
|
||||||
|
['ru' => 'Илья Сорокин', 'en' => 'Ilya Sorokin'],
|
||||||
|
['ru' => 'Александр Радулов', 'en' => 'Alexander Radulov'],
|
||||||
|
['ru' => 'Евгений Кузнецов', 'en' => 'Evgeny Kuznetsov'],
|
||||||
|
['ru' => 'Дмитрий Орлов', 'en' => 'Dmitry Orlov'],
|
||||||
|
['ru' => 'Михаил Сергачев', 'en' => 'Mikhail Sergachev'],
|
||||||
|
['ru' => 'Иван Проворов', 'en' => 'Ivan Provorov'],
|
||||||
|
['ru' => 'Илья Самсонов', 'en' => 'Ilya Samsonov'],
|
||||||
|
['ru' => 'Александр Романов', 'en' => 'Alexander Romanov'],
|
||||||
|
['ru' => 'Андрей Свечников', 'en' => 'Andrei Svechnikov'],
|
||||||
|
['ru' => 'Евгений Дадонов', 'en' => 'Evgenii Dadonov'],
|
||||||
|
['ru' => 'Вадим Шипачев', 'en' => 'Vadim Shipachyov'],
|
||||||
|
['ru' => 'Никита Гусев', 'en' => 'Nikita Gusev'],
|
||||||
|
['ru' => 'Вячеслав Войнов', 'en' => 'Vyacheslav Voynov'],
|
||||||
|
['ru' => 'Антон Худобин', 'en' => 'Anton Khudobin'],
|
||||||
|
['ru' => 'Семен Варламов', 'en' => 'Semyon Varlamov'],
|
||||||
|
['ru' => 'Валерий Ничушкин', 'en' => 'Valeri Nichushkin'],
|
||||||
|
['ru' => 'Павел Бучневич', 'en' => 'Pavel Buchnevich'],
|
||||||
|
['ru' => 'Владислав Гавриков', 'en' => 'Vladislav Gavrikov'],
|
||||||
|
['ru' => 'Илья Михеев', 'en' => 'Ilya Mikheyev'],
|
||||||
|
['ru' => 'Денис Гурьянов', 'en' => 'Denis Gurianov'],
|
||||||
|
['ru' => 'Александр Барабанов', 'en' => 'Alexander Barabanov'],
|
||||||
|
['ru' => 'Клим Костин', 'en' => 'Klim Kostin'],
|
||||||
|
['ru' => 'Яков Тренин', 'en' => 'Yakov Trenin'],
|
||||||
|
['ru' => 'Иван Барбашев', 'en' => 'Ivan Barbashev'],
|
||||||
|
['ru' => 'Артем Зуб', 'en' => 'Artem Zub'],
|
||||||
|
['ru' => 'Илья Любушкин', 'en' => 'Ilya Lyubushkin'],
|
||||||
|
['ru' => 'Александр Георгиев', 'en' => 'Alexandar Georgiev'],
|
||||||
|
['ru' => 'Петр Кочетков', 'en' => 'Pyotr Kochetkov'],
|
||||||
|
['ru' => 'Даниил Тарасов', 'en' => 'Daniil Tarasov'],
|
||||||
|
['ru' => 'Василий Подколзин', 'en' => 'Vasily Podkolzin'],
|
||||||
|
['ru' => 'Григорий Денисенко', 'en' => 'Grigori Denisenko'],
|
||||||
|
['ru' => 'Виталий Кравцов', 'en' => 'Vitali Kravtsov'],
|
||||||
|
['ru' => 'Егор Чинахов', 'en' => 'Yegor Chinakhov'],
|
||||||
|
['ru' => 'Марат Хуснутдинов', 'en' => 'Marat Khusnutdinov'],
|
||||||
|
['ru' => 'Шакир Мухамадуллин', 'en' => 'Shakir Mukhamadullin'],
|
||||||
|
['ru' => 'Александр Алексеев', 'en' => 'Alexander Alexeyev'],
|
||||||
|
['ru' => 'Даниил Мироманов', 'en' => 'Daniil Miromanov'],
|
||||||
|
['ru' => 'Дмитрий Воронков', 'en' => 'Dmitri Voronkov'],
|
||||||
|
['ru' => 'Павел Дорофеев', 'en' => 'Pavel Dorofeyev'],
|
||||||
|
['ru' => 'Николай Кулемин', 'en' => 'Nikolay Kulemin'],
|
||||||
|
['ru' => 'Александр Семин', 'en' => 'Alexander Semin'],
|
||||||
|
['ru' => 'Сергей Федоров', 'en' => 'Sergei Fedorov'],
|
||||||
|
['ru' => 'Игорь Ларионов', 'en' => 'Igor Larionov'],
|
||||||
|
['ru' => 'Вячеслав Фетисов', 'en' => 'Viacheslav Fetisov'],
|
||||||
|
['ru' => 'Павел Буре', 'en' => 'Pavel Bure'],
|
||||||
|
['ru' => 'Алексей Морозов', 'en' => 'Aleksey Morozov'],
|
||||||
|
['ru' => 'Данис Зарипов', 'en' => 'Danis Zaripov'],
|
||||||
|
['ru' => 'Максим Сушинский', 'en' => 'Maxim Sushinsky'],
|
||||||
|
['ru' => 'Александр Степанов', 'en' => 'Alexander Stepanov'],
|
||||||
|
['ru' => 'Илья Никулин', 'en' => 'Ilya Nikulin'],
|
||||||
|
['ru' => 'Алексей Терещенко', 'en' => 'Aleksey Tereshchenko'],
|
||||||
|
['ru' => 'Сергей Мозякин', 'en' => 'Sergei Mozyakin'],
|
||||||
|
['ru' => 'Александр Еременко', 'en' => 'Alexander Yeryomenko'],
|
||||||
|
['ru' => 'Василий Кошечкин', 'en' => 'Vasily Koshechkin'],
|
||||||
|
['ru' => 'Илья Брызгалов', 'en' => 'Ilya Bryzgalov'],
|
||||||
|
['ru' => 'Евгений Набоков', 'en' => 'Evgeni Nabokov'],
|
||||||
|
['ru' => 'Николай Хабибулин', 'en' => 'Nikolai Khabibulin'],
|
||||||
|
['ru' => 'Алексей Яшин', 'en' => 'Alexei Yashin'],
|
||||||
|
['ru' => 'Валерий Каменский', 'en' => 'Valeri Kamensky'],
|
||||||
|
['ru' => 'Алексей Жамнов', 'en' => 'Alexei Zhamnov'],
|
||||||
|
['ru' => 'Александр Могильный', 'en' => 'Alexander Mogilny'],
|
||||||
|
['ru' => 'Сергей Макаров', 'en' => 'Sergei Makarov'],
|
||||||
|
['ru' => 'Владимир Крутов', 'en' => 'Vladimir Krutov'],
|
||||||
|
['ru' => 'Вячеслав Быков', 'en' => 'Vyacheslav Bykov'],
|
||||||
|
['ru' => 'Андрей Хомутов', 'en' => 'Andrei Khomutov'],
|
||||||
|
['ru' => 'Александр Якушев', 'en' => 'Alexander Yakushev'],
|
||||||
|
['ru' => 'Борис Михайлов', 'en' => 'Boris Mikhailov'],
|
||||||
|
['ru' => 'Валерий Харламов', 'en' => 'Valeri Kharlamov'],
|
||||||
|
['ru' => 'Владислав Третьяк', 'en' => 'Vladislav Tretiak'],
|
||||||
|
['ru' => 'Виктор Тихонов', 'en' => 'Viktor Tikhonov'],
|
||||||
|
['ru' => 'Всеволод Бобров', 'en' => 'Vsevolod Bobrov'],
|
||||||
|
['ru' => 'Анатолий Фирсов', 'en' => 'Anatoli Firsov'],
|
||||||
|
['ru' => 'Владимир Петров', 'en' => 'Vladimir Petrov'],
|
||||||
|
['ru' => 'Сергей Капустин', 'en' => 'Sergei Kapustin'],
|
||||||
|
['ru' => 'Виктор Жлуктов', 'en' => 'Viktor Zhluktov'],
|
||||||
|
['ru' => 'Александр Мальцев', 'en' => 'Alexander Maltsev'],
|
||||||
|
['ru' => 'Владимир Мышкин', 'en' => 'Vladimir Myshkin'],
|
||||||
|
['ru' => 'Виктор Коноваленко', 'en' => 'Viktor Konovalenko'],
|
||||||
|
['ru' => 'Евгений Паладьев', 'en' => 'Yevgeni Paladiev'],
|
||||||
|
['ru' => 'Юрий Ляпкин', 'en' => 'Yuri Lyapkin'],
|
||||||
|
['ru' => 'Владимир Шадрин', 'en' => 'Vladimir Shadrin'],
|
||||||
|
['ru' => 'Александр Гусев', 'en' => 'Alexander Gusev'],
|
||||||
|
['ru' => 'Валерий Васильев', 'en' => 'Valeri Vasiliev'],
|
||||||
|
['ru' => 'Геннадий Цыганков', 'en' => 'Gennady Tsygankov'],
|
||||||
|
['ru' => 'Александр Скворцов', 'en' => 'Alexander Skvortsov'],
|
||||||
|
['ru' => 'Виктор Тюменев', 'en' => 'Viktor Tyumenev'],
|
||||||
|
['ru' => 'Сергей Светлов', 'en' => 'Sergei Svetlov'],
|
||||||
|
['ru' => 'Анатолий Семенов', 'en' => 'Anatoly Semenov'],
|
||||||
|
['ru' => 'Андрей Ломакин', 'en' => 'Andrei Lomakin'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$name = $names[array_rand($names)];
|
||||||
|
$club = Club::inRandomOrder()->first();
|
||||||
|
|
||||||
|
if (!$club) {
|
||||||
|
throw new Exception('No clubs found in the database. Please seed the clubs table first.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$usedNumbers = Player::where('club_id', $club->id)->pluck('squad_number')->toArray();
|
||||||
|
|
||||||
|
$availableNumbers = array_diff(range(1, 99), $usedNumbers);
|
||||||
|
|
||||||
|
if (empty($availableNumbers)) {
|
||||||
|
throw new Exception("No available squad numbers for club ID: {$club->id}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$squadNumber = $availableNumbers[array_rand($availableNumbers)];
|
||||||
|
|
||||||
|
return [
|
||||||
|
'full_name_ru' => $name['ru'],
|
||||||
|
'full_name_en' => $name['en'],
|
||||||
|
'weight' => rand(65, 105),
|
||||||
|
'height' => rand(160, 210),
|
||||||
|
'squad_number' => $squadNumber,
|
||||||
|
'club_id' => $club->id,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('clubs', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('name_ru');
|
||||||
|
$table->string('name_en');
|
||||||
|
$table->string('city_ru');
|
||||||
|
$table->string('city_en');
|
||||||
|
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('clubs');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('players', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('full_name_ru');
|
||||||
|
$table->string('full_name_en');
|
||||||
|
$table->unsignedInteger('weight');
|
||||||
|
$table->unsignedInteger('height');
|
||||||
|
$table->tinyInteger('squad_number');
|
||||||
|
$table->foreignIdFor(\App\Models\Club::class)
|
||||||
|
->constrained()
|
||||||
|
->onUpdate('cascade')
|
||||||
|
->onDelete('restrict');
|
||||||
|
|
||||||
|
$table->unique(['club_id', 'squad_number']);
|
||||||
|
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('players');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\Club;
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class ClubSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
Club::factory()
|
||||||
|
->count(12)
|
||||||
|
->create();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use App\Models\Player;
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class PlayerSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*/
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
Player::factory()
|
||||||
|
->count(30)
|
||||||
|
->create();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user