Symfony 4 и Doctrine, как автоматически сгенерировать репозиторий после сопоставления?

Во всех обучающих материалах, которые я нахожу, репозиторий создается автоматически с использованием make:entity при создании новых таблиц.

но я выполнял импорт из существующей базы данных после официального документация с помощью следующей команды: php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity

Эта команда не создает никакого репозитория ... и в документации не говорится о создании репозитория.

Я знаю, что могу создать его вручную, но есть ли команда для их автоматического создания? У меня 25 таблиц .... Было бы очень полезно

лени меня oO

изменить: я также пробовал php bin\console make:entity --regenerate, но я получаю no change во всех таблицах, и репозиторий не создан

Вам действительно нужны специальные классы репозитория для всех ваших сущностей? В большинстве случаев пользовательские классы репозитория представляют собой бесполезный мертвый код - если вы не реализуете собственные методы репозитория, что, по моему опыту, довольно редко. Поэтому имеет смысл не создавать эти заглушки автоматически.

lxg 10.08.2018 10:12

Сэм, не ходи сюда. Создавайте класс репозитория, только если он вам нужен.

emix 10.08.2018 10:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
16
2
32 984
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

РЕШЕНИЕ 1

Вы можете просто запустить

php bin\console make:entity --regenerate

Это подскажет и попросит:

Enter a class or namespace to regenerate [App\Entity]:

Просто нажмите Enter или укажите местоположение папки вашего объекта, и он создаст недостающие геттеры / сеттеры и репозитории.

test

---> ВНИМАНИЕ:
Если он не создает репозитории, убедитесь, что у вас есть следующая аннотация в ваших объектах:

/**
 * @ORM\Entity(repositoryClass = "App\Repository\MyClassRepository")
 */
class MyClass
{

}

Вы также можете захотеть очистить кеш, если он не работает (как отметил @Pavel Petrov в комментариях)

РЕШЕНИЕ 2

SymfonyMakerBundle позволяет создавать собственных создателей. Таким образом, вы можете создать новый под названием make:repositories, который будет генерировать репозиторий для каждой сущности, найденной в папке / Entity.

Для этого создайте класс (MakeRepositories), расширяющий AbstractMaker в вашем каталоге src/Maker/. (документация: https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html#creating-your-own-makers)

Используйте основной производитель make:entity, чтобы помочь вам создать новую команду (поскольку она содержит код для создания репозитория): https://github.com/symfony/maker-bundle/blob/master/src/Maker/MakeEntity.php

Спасибо за предложение, забыл упомянуть, что я пробовал это, но все, что я получаю, это no change на всех моих столах. Репо не создается. Обновлю свой вопрос, чтобы отразить это

Sam 10.08.2018 10:45

@Sam Я добавил еще одну возможность.

Elbarto 10.08.2018 10:55

Не уверен, почему решение 1 ничего не создает ?? Пробовал решение 2, создал файл MakeRepositories.php в src/maker, затем расширил AbstractMaker, затем скопировал строки 135–295 из ссылки на объект make в классе. Затем я набираю ./bin/console make:repositories, но он не определяется. где мне это определить, пожалуйста? документ говорит Make sure your class is registered as a service and tagged with maker.command, но я не понимаю

Sam 10.08.2018 11:13

У вас есть эта аннотация в ваших сущностях: @ORM \ Entity (repositoryClass = "App \ Repository \ MyClassRepositor‌ y")? (с указанием репозитория)

Elbarto 10.08.2018 11:19

Я не сделал этого, но добавил @ORM\Entity(repositoryClass = "App\Repository\BikedbRepository‌​"), и теперь он говорит Cannot autowire service "App\Repository\BikedbRepository": argument "$entityClass" of method "Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntit yRepository::__construct()" has no type-hint, you should configure its value explicitly., когда я запускаю make::entity --regenerate

Sam 10.08.2018 11:36

это потому, что я пытался создать репо вручную и имел extends ServiceEntityRepository для класса BikedbRepository. удалил его, снова запустил команду и no change все еще

Sam 10.08.2018 11:49

Часть "Предупреждение" делает вещь для меня! Прохладный.

spirit 17.09.2019 15:53

Я хотел добавить, что вам нужно полностью указать путь к вашему классу сущности как таковой: введите класс или пространство имен для регенерации [App \ Entity]:> App \ Entity \ Community

Dung 06.01.2020 02:21

Даже после добавления атрибутов repositoryClass репозитории не были созданы с помощью make:entity --regenerate. Мне пришлось очистить кеш, а затем он сгенерировал классы репо.

Pavel Petrov 13.01.2021 23:22

Не копируйте аннотацию слишком быстро, я скопировал аннотацию, но в моем случае сущности были сгенерированы автоматически, поэтому уже была строка ORM \ Repository, которая появилась после, удалите ее или замените на решение

Как сгенерировать сущности из существующей базы данных

Имя таблицы: CamelCase (например: table_name будет TableName)

php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity --filter = "TableName"

Как создавать сущности

Запустите команду ниже, она создаст файл объекта.

php bin/console make:entity --regenerate

Затем перейдите в свой файл сущности и добавьте @ORM\Entity repositoryClass

Пример Файл объекта

/**
 * XXXXXX
 *
 * @ORM\Table(name = "XXXX")
 * @ORM\Entity(repositoryClass = "App\Repository\XXXXRepository")
 */

class XXXXX {

Выполните еще раз эту команду еще раз, и она создаст для вас репозиторий.

php bin/console make:entity --regenerate

После создания классов сущностей из базы данных добавьте следующую аннотацию к каждой из ваших сущностей:

@ORM\Entity(repositoryClass = "App\Repository\ClassNameRepository")

Чтобы сгенерировать классы репозитория, выполните следующую команду:

php bin/console make:entity --regenerate App

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