Программное удаление Symfony 4 с Doctrine ORM

Я хочу, чтобы конкретный объект был удален (не все объекты). Я установил пакет StofDoctrineExtensionsBundle, который должен предоставить мне функцию Softdeleteable.

Итак, я обновил свою сущность:

Пользователь.php

<?php 
namespace App\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\SoftDeleteable\Traits\SoftDeleteableEntity;
/**
 * @ORM\Entity(repositoryClass = "App\Repository\UserRepository")
 * @Gedmo\SoftDeleteable(fieldName = "deletedAt", timeAware=false, hardDelete=false)
 */
class User implements UserInterface
{

    use SoftDeleteableEntity;

Я создал миграцию и запустил миграцию. Моя таблица User теперь как дополнительная колонка deleted_at.

После документация теперь можно запустить этот код для мягкого удаления записи:

public function delete(User $user, EntityManagerInterface $em)
{
     $em->remove($user);
     $em->flush();

Однако это вызывает у меня ошибку, потому что сущность пользователя имеет отношения, а сам пользователь не может быть удален. Конечно, это то, что я запрограммировал. Но я не очень хочу удалять запись, я хочу софтудалить запись.

An exception occurred while executing 'DELETE FROM user WHERE id = ?' with params [79]:

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`thedatabase`.`shoppingcart`, CONSTRAINT `FK_932C7444A76ED395` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

При чтении документация упоминается что-то о настройке softdelete. Но, честно говоря, я понятия не имею, как это исправить.

Как я могу использовать softdelete в Symfony 4?

Как вы его установили? Через Symfony Flex? Или без него?

β.εηοιτ.βε 18.03.2019 23:43

Я использовал Symfony Flex.

Timo002 18.03.2019 23:46

Вы активировали расширение? symfony.com/doc/master/bundles/StofDoctrineExtensionsBundle/‌​…

acucchieri 18.03.2019 23:50

@EquaPro, забыл активировать... Tnx man!

Timo002 18.03.2019 23:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
4
12 391
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я предполагаю, что вам не хватает, чтобы включить расширение в файле конфиг/пакеты/stof_doctrine_extensions.yaml, которое было добавлено квитанцией flex.

Похоже, по умолчанию, это читается

stof_doctrine_extensions:
    default_locale: en_US

Когда, если вы хотите использовать мягкое удаление, вам нужно будет его активировать:

stof_doctrine_extensions:
    default_locale: en_US
    orm:
        default:
            softdeleteable: true

Да, забыл добавить softdeletable: true к stof_doctrine_extensions. Спасибо!!!

Timo002 18.03.2019 23:57

Не забывайте о функции фильтра: symfony.com/doc/1.x/bundles/StofDoctrineExtensionsBundle/….

Wesley Abbenhuis 16.06.2021 17:59

Я также должен включить это в свою доктрину.yaml

доктрина: дбал:

ваша конфигурация dbal здесь

orm:
    auto_generate_proxy_classes: %kernel.debug%
    auto_mapping: true

только эти строки добавлены дополнительно

    filters:
        softdeleteable:
            class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
            enabled: true #this one doesn't was in the doc, I found it in an issue

Другие вопросы по теме