Symfony deleteaction multi table delete - PullRequest
       3

Symfony deleteaction multi table delete

0 голосов
/ 30 сентября 2018

Привет. Я хочу удалить товар из другой таблицы при удалении товара.И я хочу сделать это на контроллере.

$deleteQuery = $this->getDoctrine()
        ->getManager()
        ->createQueryBuilder('d')
        ->delete('TechnoSiteBundle:Sepet', 's')
        ->where('s.id = ' . $request->get('id'))->getQuery();
    $deleted = $deleteQuery->getResult();

ИЛИ

$deleteQuery = $em->getRepository('TechnoSiteBundle:Ebatlar')->createQueryBuilder('table1')
        ->where('table1.id')
        ->leftJoin('table1.sepet', 'table2')
        ->andWhere('table2.ebat1')
        ->delete('table1.id = table2.productid')
        ->getQuery();
    $deleted = $deleteQuery->getResult();

Я хочу удалить два связанных продукта.Я получаю эту ошибку при использовании Cascade;

2/2DBALException: An exception occurred while executing 'DELETE FROM ebatlar WHERE id = ?' with params [30]:

1 Ответ

0 голосов
/ 30 сентября 2018

Не очень ясно, что вы должны делать с таким небольшим количеством информации о ваших сущностях.

Некоторые вещи для изучения:

  • Если ваши две строки productв связи с этим, вы можете захотеть использовать cascade = {"remove"} где-нибудь аннотацию.

  • Ничто не мешает вам выполнить два запроса, если вы хотите вручнуюудалите две сущности.

  • Некоторые заметки о наилучшей практике с Doctrine, Symfony и MVC в целом (не связанные напрямую с вашим вопросом, и у вас нет дляследуйте этим рекомендациям, но вы обязательно должны следовать , поскольку это в конечном итоге значительно облегчит вашу жизнь):

    • Вы не должны использовать слишком много логикив контроллерах.В Symfony вы хотите, чтобы ваши контроллеры были почти пустыми.Вы создаете сервис с логикой и вызываете его из своего контроллера в соответствующем действии.Это имеет много преимуществ, которые вы заметите по мере роста вашего проекта: меньше дублирования кода, свобода менять модель без изменения контроллеров и т. Д.
    • Лучше связать параметры , чемиспользуйте конкатенацию как ->where('s.id = ' . $request->get('id')).Это $request->get('id') - это то, что пользователь может подделать, чтобы вставить практически все, что он хочет, в ваше предложение where.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...