Как сделать нативный SQL запрос для UPDATE с WHERE IN условием Doctrine 2?

Для выполнения нативного SQL запроса с условием WHERE IN в Doctrine 2 вам понадобится использовать метод createNativeQuery() и класс Query. Вот подробное объяснение шагов, которые нужно предпринять.

Шаг 1: Получение EntityManager
Первым шагом необходимо получить экземпляр EntityManager из контейнера зависимостей Symfony. Вы можете сделать это с помощью внедрения зависимости, используя конструктор или аннотацию @Inject.

use DoctrineORMEntityManagerInterface;
use SymfonyComponentHttpFoundationResponse;

class YourController
{
    private EntityManagerInterface $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function yourAction(): Response
    {
        // ваш код
    }
}

Шаг 2: Создание и выполнение нативного SQL запроса

public function yourAction(): Response
{
    $conn = $this->entityManager->getConnection();
    
    $sql = 'UPDATE your_table SET column = :value WHERE id IN (:ids)';
    
    $stmt = $conn->prepare($sql);
    
    $value = 'new value';
    $ids = [1, 2, 3];

    $stmt->bindValue('value', $value);
    $stmt->bindValue('ids', $ids, Connection::PARAM_INT_ARRAY);
    
    $stmt->execute();
    
    // ваш код
}

В приведенном выше коде мы создаем SQL запрос UPDATE с указанием таблицы, столбца и значений, которые хотим обновить. Мы используем псевдопеременные :value и :ids для предотвращения атаки SQL-инъекций.

Затем мы подготавливаем запрос с помощью метода prepare() и устанавливаем значения для переменных с помощью метода bindValue(). Заметьте, что для параметра ids мы указываем Connection::PARAM_INT_ARRAY, чтобы Doctrine знал, что это массив целых чисел.

Наконец, мы выполняем запрос, вызывая execute() на предварительно подготовленном операторе.

Это все, что вам нужно сделать, чтобы выполнить нативный SQL запрос UPDATE с условием WHERE IN в Doctrine 2.