Во всех обучающих материалах, которые я нахожу, репозиторий создается автоматически с использованием make:entity при создании новых таблиц.
но я выполнял импорт из существующей базы данных после официального документация с помощью следующей команды: php bin/console doctrine:mapping:import App\\Entity annotation --path=src/Entity
Эта команда не создает никакого репозитория ... и в документации не говорится о создании репозитория.
Я знаю, что могу создать его вручную, но есть ли команда для их автоматического создания? У меня 25 таблиц .... Было бы очень полезно
лени меня oO
изменить: я также пробовал php bin\console make:entity --regenerate, но я получаю no change во всех таблицах, и репозиторий не создан
Сэм, не ходи сюда. Создавайте класс репозитория, только если он вам нужен.




РЕШЕНИЕ 1
Вы можете просто запустить
php bin\console make:entity --regenerate
Это подскажет и попросит:
Enter a class or namespace to regenerate [App\Entity]:
Просто нажмите Enter или укажите местоположение папки вашего объекта, и он создаст недостающие геттеры / сеттеры и репозитории.
---> ВНИМАНИЕ:
Если он не создает репозитории, убедитесь, что у вас есть следующая аннотация в ваших объектах:
/**
* @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 Я добавил еще одну возможность.
Не уверен, почему решение 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, но я не понимаю
У вас есть эта аннотация в ваших сущностях: @ORM \ Entity (repositoryClass = "App \ Repository \ MyClassRepositor y")? (с указанием репозитория)
Я не сделал этого, но добавил @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
это потому, что я пытался создать репо вручную и имел extends ServiceEntityRepository для класса BikedbRepository. удалил его, снова запустил команду и no change все еще
Часть "Предупреждение" делает вещь для меня! Прохладный.
Я хотел добавить, что вам нужно полностью указать путь к вашему классу сущности как таковой: введите класс или пространство имен для регенерации [App \ Entity]:> App \ Entity \ Community
Даже после добавления атрибутов repositoryClass репозитории не были созданы с помощью make:entity --regenerate. Мне пришлось очистить кеш, а затем он сгенерировал классы репо.
Не копируйте аннотацию слишком быстро, я скопировал аннотацию, но в моем случае сущности были сгенерированы автоматически, поэтому уже была строка 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
Вам действительно нужны специальные классы репозитория для всех ваших сущностей? В большинстве случаев пользовательские классы репозитория представляют собой бесполезный мертвый код - если вы не реализуете собственные методы репозитория, что, по моему опыту, довольно редко. Поэтому имеет смысл не создавать эти заглушки автоматически.