Symfony, Доктрина и createNativeQuery

#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);  }