Класс не найден в цепочке сконфигурированных пространств имен

#php #sql #doctrine-orm #doctrine #symfony5

#php #sql #doctrine-orm #доктрина #symfony5

Вопрос:

Здравствуйте, мне нужно сначала объяснить, что я делаю:

  • Я работал над проектом, и по какой-то причине мне пришлось использовать две базы данных вместо одной. итак, я делаю то, что нужно было сделать, я меняю свою доктрину.настройки yaml с тем, что объясняется в документе symfony, и в этот момент появилась ошибка

Ошибка SQL, в которой говорится, что для запроса X в таблице X не найден столбец

  • (ошибка SQLSTATE[42S02], но это не важно)

(параллельно с этой ошибкой я должен сказать, что дерьмо «—em» не сработало для меня, когда я это делаю php bin/console doctrine:migrations:diff/migrate --em=default or customer , так что я действительно php bin/console doctrine:schema:update --force --em=default or customer делаю, и я не знаю почему! так что, если вам есть что сказать здесь, я тоже приму это.)

В любом случае, я возвращаюсь к тому, что я объяснял, эта ошибка sql появляется из-за моего контроллера, они работают с реализацией репозитория по умолчанию ( MyClassNameRepository $myClasNameReposiotry например), которая обычно реализует EntityManager по умолчанию, но это не так, и это выдает эту ошибку.

На данный момент я подумал, что у меня возникла ошибка в некоторых файлах в symfony из-за дерьма, которое я, вероятно, делаю. У меня нет времени на замену всей реализации репозитория, поэтому я создаю новый проект с конфигурацией doctrine, которая необходима для работы с двумя базами данных в соответствии с документом symfony. Такой же, как в моем проекте :

 doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                # configure these for your database server
                url: '%env(resolve:DATABASE_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            customer:
                # configure these for your database server
                url: '%env(resolve:DATABASE_CUSTOMER_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
    orm:
        entity_managers:
            default:
                connection: default
                mappings:
                    Main:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'AppEntity'
                        alias: Main
            customer:
                connection: customer
                mappings:
                    Customer:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/Customer'
                        prefix: 'AppEntityCustomer'
                        alias: Customer
  

Это та же конфигурация, что и в документе symfony, за исключением основного каталога.
я создал свои сущности, по одной в каждой базе данных, и я делаю с ними crud.

Файлы иерархии:

 src/
-----Entity/
     ----Product
     ----Customer/
            -ProductCustomer
-----Repository/
     ----ProductRepository
     ----Customer/
         -----ProductCustomerRepository
And same for the form
  

И с этим тестовым приложением я увидел новую ошибку, для клиентской части у меня была та же ошибка sql, потому что столбец был найден в неправильном bdd, после изменения кода для :

это

     /**
     * @Route("/", name="customer_produit_customer_index", methods={"GET"})
     */
    public function index(ProductCustomerRepository $productCustomerRepository): Response
    {
        return $this->render('customer/produit_customer/index.html.twig', [
            'produit_customers' => $productCustomerRepository->findAll(),
        ]);
    }
  

к этому

     /**
     * @Route("/", name="customer_produit_customer_index", methods={"GET"})
     */
    public function index(): Response
    {
        $productCustomers = $this->getDoctrine()
            ->getRepository(ProduitCustomerRepository::class, "customer")
            ->findAll()
        ;
        return $this->render('customer/produit_customer/index.html.twig', [
            'produit_customers' => $productCustomers,
        ]);
    }
  

Ошибка изменилась, как я и ожидал, и знаю, что у меня есть :

 The class 'AppRepositoryCustomerProduitCustomerRepository' was not found in the chain configured namespaces AppEntityCustomer
  

Сколько бы я ни искал в Интернете, я не могу найти ничего, что действительно решает мои ошибки. Теперь я устал искать, тем более что я не понимаю этих ошибок, потому что я не в первый раз настраиваю приложение, подключенное к двум базам данных, но у меня впервые возникают эти ошибки.

Поэтому, пожалуйста, помогите мне = D.

Комментарии:

1. Я забыл default_entity_manager: 'default' в orm для доктрины. файл yaml при копировании прошлого.

2. Но будьте осторожны, это не то, что вызывает ошибку!

3. Хорошо, вчера я действительно устал и знаю, что вижу, что я делаю дерьмо в своем контроллере, я реализую неправильный класс в getRepository, ему нужна сущность, и я дал ему репозиторий, поэтому я меняю это и знаю, что я вернулся к ошибке SQL, потому что столбец все еще ищется внеправильный bdd

4. Пожалуйста, мне нужно решение для ошибки SQL ‘Таблица SQLSTATE [42S02] не найдена’

5. По-видимому, это все потому, что я пытался реализовать два диспетчера сущностей, в то время как часть моих сущностей не находилась в дочернем каталоге, например ‘Customer’, Что нужно сделать, это переместить контроллер, который находится в каталоге App Entity, в дочерний каталог, такой как App Entity Main … Это раздражает, потому что в документации явно не сказано, что мы не можем сделать так, как я хотел это сделать.