получил одну проблему с Doctrine. Вот двунаправленная ассоциация ManyToOne-OneToMany
class InternetPlan extends BaseProduct
...
/**
* @ORM\ManyToOne(targetEntity="App\Entity\PricingType", inversedBy="internetPlans")
* @ORM\JoinColumn(name="pricing_type_id", referencedColumnName="id", nullable=true)
* @JMS\Exclude()
*/
private $pricingType;
Родительский класс
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductsRepository")
* @ORM\InheritanceType(value="SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap(
* {
* InternetPlan::type = "InternetPlan",
* TVPlan::type = "TVPlan",
* AdditionalServicePlan::type = "AdditionalServicePlan",
* Device::type = "Device"
* }
* )
*/
abstract class BaseProduct
И обратная сторона
class PricingType
...
/**
* @ORM\OneToMany(targetEntity="App\Entity\InternetPlan", mappedBy="pricingType")
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
* @JMS\Type("object_ids")
*/
private $internetPlans;
ПРОБЛЕМА : когда я выполняю doctrine: migrations: diff , он хочет создать ограничение внешнего ключа в базовом продукте родительской таблицы, игнорируя мою аннотацию JoinColumn (nullable = true).
$this->addSql('ALTER TABLE base_product ADD CONSTRAINT FK_E74CBDC94B70279 FOREIGN KEY (pricing_type_id) REFERENCES pricing_type (id)');
Но, конечно, когда я выполняю миграцию, получаю следующую ошибку
An exception occurred while executing 'ALTER TABLE base_product ADD CONSTRAINT FK_E74CBDC94B70279 FOREIGN KEY (pricing_type_id) REFERENCES pricing_type (id)':
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`taskman42`.`#sql-1_20`, CONSTRAINT `FK_E74CBDC94B70279` FOREIGN KEY (`pricing_type_id`) REFERENCES `pricing_type` (`id`))
Поэтому мне нужно вручную удалять эту строку из каждой новой миграции.
Основная вопрос : как я могу избежать этой строки в каждой новой миграции?