Я хочу, чтобы конкретный объект был удален (не все объекты). Я установил пакет 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.
Вы активировали расширение? symfony.com/doc/master/bundles/StofDoctrineExtensionsBundle/…
@EquaPro, забыл активировать... Tnx man!






Я предполагаю, что вам не хватает, чтобы включить расширение в файле конфиг/пакеты/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. Спасибо!!!
Не забывайте о функции фильтра: symfony.com/doc/1.x/bundles/StofDoctrineExtensionsBundle/….
Я также должен включить это в свою доктрину.yaml
доктрина: дбал:
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
Как вы его установили? Через Symfony Flex? Или без него?