Дублирование записи Symfony 4 с новым id

175
03 октября 2018, 11:10

Вопрос по Symfony 4, можно и ниже. В общем ломаю голову как сделать чтоб по нажатию кнопки появлялась такая же запись только с другим айди, ++ от максимального к примеру

По нажатию на желтую кнопку copy ниже появляется такая же запись только id равен 2 через запросы? тогда как правильно передать переменную которая хранит id записи для ее копирования? для, к примеру, удаления есть такой роутинг @Route("/{id}", name="pack_delete", methods="DELETE")

Вот такой Вариант не работает как подсказали ниже, мне кажется что за место remove в $em->remove($ability); нужно использовать что-то другое, удаление тоже не помогло

/**
 * @Route("/copy/{id}", name="ability_copy", methods="GET|POST")
 */
public function copy(Request $request, Ability $ability): Response
{
    if ($this->isCsrfTokenValid('copy'.$ability->getId(), $request->request->get('_token'))) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($ability);
        $em->flush();
    }
    return $this->redirectToRoute('ability_index');
}
Answer 1

Решил все самым наверно костыльным способом, прошу, если кто-то знает способ красивей опишите ниже Мой вариант с коментариями

AbilityController.php

/**
     * @Route("/copy/{id}", name="ability_copy", methods="GET|POST")
     */
    public function copy(Request $request, Ability $ability): Response
    {
        $entityManager = $this->getDoctrine()->getManager(); //получение entityManager"ера
        $connection = $entityManager->getConnection(); //получение коннекшина к дефолтной базе данных
        $copingId = $ability->getId(); //получние {id} из роутинга
        $mappings = $this->getDoctrine()->getManager()->getClassMetadata(Ability::class);
        $fieldNames = $mappings->getFieldNames(); //получаем массив названий столбцов
        array_shift($fieldNames); //удаляет первый элемент массива [0]=> int(1) "id" 
        $valuesString = implode("`,`", $fieldNames);//из массива получаем строку вида idItem','code','reloadTime','durationTime','idAbilityType','dateCreated','author','dateChange','lastAuthor
        $sqlAddEntry = "INSERT INTO Ability (`".$valuesString."`) SELECT `".$valuesString."` FROM Ability WHERE id = $copingId;"; //INSERT INTO Ability (`code`...) SELECT `code`... FROM Ability WHERE id = 1;
        $stmt = $connection->prepare($sqlAddEntry);   //готовим сформированный запрос
        $stmt->execute();                       //выполняем запрос
        return $this->redirectToRoute('ability_index');
    }

index.html.twig

<a class="dublicate-btn" href="{{ path('ability_copy', {'id': ability.id}) }}">Копировать запись</a>
READ ALSO
codeception amOnPage и POST

codeception amOnPage и POST

Пробую использовать codeception functional тесты

142
Как с помощью ORM RedBeanPHP вывести все статьи?

Как с помощью ORM RedBeanPHP вывести все статьи?

вот есть функция R::findAll которая выводит записи в виде массива:

163
Прибавление единицы раз в сутки?

Прибавление единицы раз в сутки?

Раз в сутки число увеличивается на 1 и дробится на каждое число, но число почемуто не увеличиваетсяВ чем моя ошибка:

150
Получить данные по сайтам из Google Analitics

Получить данные по сайтам из Google Analitics

Есть аккаунт GoogleВ гугл аналитикс добавлено несколько сайтов

163