Intereting Posts
сообщение об успешном запуске / сбое после отправки? как передать массив через скрытое поле Apigility – Как использовать модуль ORM Doctrine из командной строки ZF2 PHP: Получить индекс элемента с именем тега Как установить композитор в службу приложений? Как я могу получить PHP-скрипт ** результаты **, включенные в другой скрипт PHP? Можно ли захватить вывод эха в PHP? Что означает критическая запись кэша GC Получение списка videoId в массиве с помощью api v3 playlistItems YouTube и создание другого видео-запроса для получения статистики viewCount Почему MySQL-соединение блокируется из-за многих ошибок подключения? .htaccess переписать: субдомен как GET var и путь как GET var symfony2 call is_granted в избирателе: как избежать бесконечного цикла? Является ли это лучшим подходом к созданию контрольного журнала? Когда я должен объявлять переменные в классе PHP? Переопределить URL внешнего продукта на кнопку «Добавить в корзину»

ORM Doctrine ManyToOne по обновлению CASCADE (Symfony)

У меня есть два объекта

class Promotor { /** * @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor") * @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false) */ protected $ciudad; 

а также

 class Ciudad { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="nombre", type="string", length=50) */ private $nombre; 

«Промоутер» может жить в одной «Сьюдад» (Город). А в «Сьюдад» (Город) может жить много «Промоусов».

Если я добавлю onDelete = "CASCADE" в JoinColumn

 /** * @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor") * @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false, onDelete="CASCADE") */ protected $ciudad; 

он генерирует следующий код

 ALTER TABLE promotor DROP FOREIGN KEY FK_BF20A37FE8608214; ALTER TABLE promotor ADD CONSTRAINT FK_BF20A37FE8608214 FOREIGN KEY (ciudad_id) REFERENCES Ciudad (id) ON DELETE CASCADE 

но также мне нравится делать CASCADE при обновлении. Я пытаюсь использовать onUpdate = "CASCADE", но он не работает

 [Doctrine\Common\Annotations\AnnotationException] [Creation Error] The annotation @ORM\JoinColumn declared on property Web\PromotorBundle\Entity\Promotor::$ciudad does not have a property named "onUpdate". Available properties: name, referencedColumnName, unique, nulla ble, onDelete, columnDefinition, fieldName 

По ошибке я понимаю, что свойство onUpdate не существует, но .. Есть ли способ сделать каскад при обновлении?

OnDelete = "CASCADE" используется на уровне базы данных. Как вы уже сказали, нет onUpdate. Другим недостатком является то, что ON DELETE CASCADE работает только на InnoDB. Это не работает на MyISAM.

Но вы можете использовать каскадные операции Doctrine in-memory:

 class Promotor { /** * @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"}) * @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false) */ protected $ciudad; 

Все это описано в документации: http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations

Кроме того, вы можете пропустить аннотацию JoinColumn , потому что так, как вы ее написали, это конфигурация по умолчанию, и она создается неявно.

Поэтому вы можете просто написать:

 class Promotor { /** * @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"}) */ protected $ciudad;