Я следую учебнику по Symfony 4, где мы хотим создать необработанный запрос. Вот код, который представлен в учебнике:
public function index(Request $request)
{
$entityManager = $this->getDoctrine()->getManager();
$conn = $entityManager->getConnection();
$sql = '
SELECT * FROM user u
WHERE u.id > :id
';
$stmt = $conn->prepare($sql);
$stmt->execute(['id' => 3]);
//more code
}
Но когда я пытаюсь сделать то же самое, метод getconnection, похоже, не распознается моей IDE, и он выдает мне это сообщение:
methode getconnection not found in \Doctrine\Common\Persistence\ObjectManager
Любые идеи о том, что мне делать? Я ценю это.
Возможно, вам лучше просто забыть об этом руководстве и следовать официальной документации Symfony о том, как использовать объект соединения dbal: symfony.com/doc/current/doctrine/dbal.html
Спасибо большое, сэр ! Как вы сказали, это просто проблема в IDE. ведь сработало!




поскольку на самом деле это не ошибка, а скорее результат статического анализа, вы можете попытаться отключить используемый инструмент статического анализа (не совсем уверен, какой именно), вы могли бы сделать это при получении диспетчера сущностей:
/** @var \Doctrine\ORM\EntityManagerInterface $entityManager */
$entityManager = $this->getDoctrine()->getManager();
если инструмент статического анализа хорош, он примет комментарий/подсказку и распознает менеджер сущностей таким, какой он есть на самом деле, и, вероятно, перестанет жаловаться.
(вопрос, который я задаю себе: есть ли причина, по которой вы используете простой SQL вместо... вы знаете... диспетчера сущностей, например... $user = $entityManager->find(User::class, 3);... если только ваш пользователь не является сущностью по какой-либо причине)
Спасибо, сэр, за вашу помощь! моя IDE распознала getConnection , но после этого он не распознал мой синтаксис sql. Но все в порядке, это работает в обоих случаях! Большое спасибо, сэр. И почему я использую синтаксис sql, это просто учебник, в котором они показывают вам все возможные случаи, но ваш образ мышления очень разумен, и я буду использовать его в качестве совета, если захочу разработать свое правильное приложение в будущем. Еще раз спасибо!
Ваш код должен работать, несмотря на жалобы IDE. getManager намекает на тип, чтобы вернуть интерфейс ObjectManager, но, предполагая, что вы используете базу данных, фактически возвращает EntityManagerInterface, который является производным от ObjectManager. Именно EntityManagerInterface содержит метод getConnection. Вероятно, лучше всего внедрить EntityManagerInterface непосредственно в ваш метод, как показано в комментарии здесь: symfony.com/doc/current/…