#php #database #symfony #doctrine
#php #База данных #symfony #доктрина
Вопрос:
Я начал играть с Symfony и пытаюсь создать запрос к базе данных. Насколько я понимаю, я должен использовать entitymanager для создания nativequery. Когда я выполняю приведенный ниже код, я получаю это предупреждение.
Предупреждение: Неопределенная переменная $EntityManager
Я понимаю, что это логично, так как переменная нигде не инициализирована, но откуда мне взять entitymanager?
Вот мой класс:
namespace AppRepository; use AppEntityNews; use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository; use DoctrinePersistenceManagerRegistry; use DoctrineORMQueryResultSetMapping; class NewsRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, News::class); } public function getById($id) { $rsm = new ResultSetMapping(); $query = $entityManager-gt;createNativeQuery('SELECT * FROM `news` WHERE `id`=? LIMIT 1', $rsm); $query-gt;setParameter(1, $id); $users = $query-gt;getResult(); } }
Комментарии:
1. Вы забыли определить переменную (т. Е. в конструкторе
$this-gt;entityManager = $doctrine-gt;getManager();
), а затем [в других методах] использовать ее как$this-gt;entityManager
.2. Не стесняйтесь проверять или/и озвучивать мой ответ, если это вам помогло.
Ответ №1:
Вы находитесь в репозитории сущностей, _em
он должен быть общедоступным.
Вы могли бы либо сделать:
public function getById($id) { $rsm = new ResultSetMapping(); $query = $this-gt;_em-gt;createNativeQuery('SELECT * FROM `news` WHERE `id`=? LIMIT 1', $rsm); $query-gt;setParameter(1, $id); $users = $query-gt;getResult(); }
или используйте автозапуск, чтобы получить диспетчер сущностей.
use DoctrineORMEntityManagerInterface; public function __construct(EntityManagerInterface $em, ManagerRegistry $registry) { $this-gt;em = $em; parent::__construct($registry, News::class); }