Учебный пример.
В папке Entity у меня есть файлы Category.php и Video.php.
В БД есть одноименные таблицы.
category
id
title
video
id
title
category_id
youtube_id
У одной категории может быть много видео.
Мне нужно создать ключ, объединяющий поля category.id и video.category_id
Пишу в классе ManyToOne
Entity\Video.php
<?php
namespace App\Entity;
use App\Repository\VideoRepository;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: VideoRepository::class)]
class Video
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column]
private ?int $category_id = null;
#[ORM\Column(length: 255)]
private ?string $youtube_id = null;
// У одной категории может быть много видео.
#[ORM\ManyToOne(targetEntity: Category::class)]
#[ORM\JoinColumn(name: 'category_id', referencedColumnName: 'id')]
Далее в командной строке
php bin/console make:entity --regenerate
no change: src/Entity/Category.php
no change: src/Entity/Page.php
no change: src/Entity/Video.php
Success!
php bin/console make:migration
[WARNING] You have 1 available migrations to execute.
Are you sure you wish to continue? (yes/no) [yes]:
y
[WARNING] No database changes were detected.
The database schema and the application mapping information are already in sync.
php bin/console doctrine:migrations:migrate
WARNING! You are about to execute a migration in database "fv" that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]:
> y
[error] Migration DoctrineMigrations\Version20230104073939 failed during Execution. Error: "An exception occurred while executing a query: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'category' already exists"
In ExceptionConverter.php line 45:
An exception occurred while executing a query: SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'category' already exists
In Exception.php line 28:
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'category' already exists
In Connection.php line 69:
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'category' already exists
В общем изменения не видит, миграция не происходит.
Способ выше работал без ошибок, если добавлять новые поля через миграцию. А вот ключ не добавляет. Говорит ничего не изменилось, ну и далее как следствие ошибки.
Как добавить ключ, связывающий поля category.id и video.category_id?