Symfony -> перезапись существующей сущности при обновлении

Я создаю простой пользовательский класс
- Пользователь -> entity
- Адрес -> сущность

Когда пользователь был создан, я создаю адресную запись в своей базе данных.

Теперь, когда пользователь отредактировал и изменил свой адрес:
Если адрес существует, ему нужно взять этот существующий адрес
если адрес не существует, Symfony необходимо создать новый и использовать новый адрес.

В банкомате я могу создавать пользователей и их адрес,
, но когда я редактирую адрес пользователя:
Текущий существующий адрес будет перезаписан вместо создания нового.

Может я упустил какую-то логику или делаю это неправильно.

вот мой код:

public function editAction(Request $request,Users $user)
{

    $form = $this->createForm(UserForm::class, $user);

    if ($request->getMethod() == 'POST') {

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $form = $form->getData();

            $this->tryEditAction($user, $form);

            return $this->redirectToRoute('admin_userslist');
        }
    }


    $label = "Gebruiker aanpassen";
    return $this->render('@ProjectUser/backend/edit.html.twig', array(
        'form' => $form->createView(),
        'user' => $user,
        'label' => $label,

    ));
}

А вот и TryEditAction:

public function tryEditAction($user, $form)
{

    $formAddress = $form->getAddress();

    $formAddressStreet = $formAddress->getStreet();
    $formAddressStreetNr = $formAddress->getStreetNr();
    $formAddressStreetBus = $formAddress->getStreetBus();


    $entityManager = $this->getDoctrine()->getManager();


        //***
        // Getting the entitymanager to get all addresses stored in our db
        // Check if this address exist, so we change or edit the address accordingly to the user
        //**

    $address = $entityManager->getRepository('ProjectLocationBundle:Address')
        ->findOneBy(
            array(
                'street' => $formAddressStreet,
                'street_nr' => $formAddressStreetNr,
                'street_bus' => $formAddressStreetBus
            )

        );
    if ($address):

        $foundAddress = $address;
        $user->setAddress($foundAddress);
        $foundAddress->setUser($user);
        $entityManager->persist($foundAddress);
    else:
        $newAddress = new Address();
        $newAddress = $formAddress;
        $entityManager->persist($newAddress);
        $entityManager->flush($newAddress);
        $user->setAddress($newAddress);

    endif;


   // dump($user); die;

    $userName = $user->getUsername();
    $slug = $this->slugify($userName);
    $user->setSlug($slug);

    $entityManager->persist($user);
    $entityManager->flush();

    return $user;


}

1. Наличие логики tryEdit в контроллере - плохая идея. Лучшее место для этого - хранилище сущностей. 2. В вашем случае вам необходимо использовать отношение «один ко многим» для управления коллекцией массивов адресов. Все это полезное вы найдете в руководстве по доктрине.

Eugene Ruban 20.05.2018 19:54

Также по поводу этого $newAddress = $formAddress; - вы проверяли, что внутри $formAddress? Какой там id? ;) Понимаете?) Итак, попробуйте установить все свойства одно за другим, кроме свойства id, как $newAddress->setStreet() = $formAddress->getStreet();, но это также лучший способ добавить новый метод в ваш AddressRepository или в Entity.

Eugene Ruban 20.05.2018 19:57

Спасибо ребята .. Я заменил свой код в репозиторий. Я также проверил адрес -> $ formaddress .. Если адрес существует, я использую этот адрес .. В противном случае я создаю новый, сохраняю и сбрасываю его .. Когда он сбрасывается, я добавляю его пользователю. Теперь он работает

Mookum 22.05.2018 10:22

Рад быть полезным.

Eugene Ruban 22.05.2018 10:47
Стоит ли изучать 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 и хотите разрабатывать...
0
4
111
0

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