#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 … Это раздражает, потому что в документации явно не сказано, что мы не можем сделать так, как я хотел это сделать.