I want to connect another database to my project and link it to my bundle.
There is my configuration for the database connection :
# Doctrine Configuration in app/config/config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
forum:
driver: %database_driver2%
host: %database_host2%
port: %database_port2%
dbname: %database_name2%
user: %database_user2%
password: %database_password2%
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
ProjectBackBundle: ~
ProjectFrontBundle: ~
ProjectUsersBundle: ~
forum:
connection: forum
mappings:
ProjectForumBundle: ~
The second database (forum) already exists and I check the connection informations.
When I go to the website I have this error :
Unrecognized field: usernameCanonical
There are the command I execute in order to generate de mapping :
php app/consolde doctrine:mapping:convert xml src/Project/ForumBundle/Resources/config/doctrine/metadata/orm --from-database --force --em="forum"
But this command is infinite, it is not executed. Why ? Did I miss something ?
From the error message, you are probably using FOSUserBundle, and you have to tell it which entity manager to use, just like your own bundles. Your configuration for your 'default' entity manager should look like this:
default:
connection: default
mappings:
ProjectBackBundle: ~
ProjectFrontBundle: ~
ProjectUsersBundle: ~
FOSUserBundle: ~
Related
I have the same symfony app deployed in two servers.
I use two entity managers, one called defaul with a connection on "local" database and the other called online on the "remote" database
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
online:
driver: pdo_mysql
host: '%database_host2%'
port: '%database_port2%'
dbname: '%database_name2%'
user: '%database_user2%'
password: '%database_password2%'
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
default_entity_manager: default
entity_managers:
default:
dql:
string_functions:
GROUP_CONCAT: AppBundle\DQL\GroupConcatFunction
connection: default
mappings:
LexikTranslationBundle: ~
AppBundle: ~
LilWorksStoreBundle: ~
online:
connection: online
mappings:
AppBundle: ~
LilWorksStoreBundle: ~
I copy some entities from the remote database to the local app within a service. My service get the two entity managers
services:
app.syncro:
class: AppBundle\Service\Syncro
arguments: ['#doctrine.orm.default_entity_manager','#doctrine.orm.online_entity_manager']
I clone the remote entity and I try to persist it in my local
$user = $this->emRemote->getRepository("AppBundle:User")->find(1);
$clonedUser = clone $user;
$this->emLocal->persist($clonedUser->cloneUser());
$this->emLocal->flush();
The flush don't persist in the local database but try to persist in the distant.
Is something in my configuration doesn't works? Maybe my entity still have the remote database name stored in proxy?
I'm trying to setup an Sql Server connection for Doctrine in Symfony2.However I can not figure out how to setup some Entity Foo to be managed by the new Entity Manager.
I have seen this post in regards to managing Entities with multiple Entity Managers, however I don't know how to use it with different Entity Managers like this. What metadata should I use so I can handle some of My entities with the new Entity Manager?
You can put Foo entity to separate bundle i.e MyFooBundle (if you have single core/app bundle) and map the bundle to other entity manager.
Disable auto mapping and configure connections at config.yml then define the entity managers and mapping
doctrine:
dbal:
connections:
default:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
other:
driver: %database_driver_2%
host: %database_host_2%
dbname: %database_name_2%
user: %database_user_2%
password: %database_password_2%
charset: UTF8
orm:
entity_managers:
default:
connection: default
mappings:
FOSUserBundle: ~
AppBundle: ~
other:
connection: other
mappings:
MyFooBundle: ~
I'm trying to use an Xhprof bundle in conjunction with XhGUI. I've have two separate databases for my app, one for the actual domain models(postgres) and one to store the profiling data(mysql).
I've created two connections and entity managers in the my config.yml to account for this. I'm having trouble with the mapping now though because two of my bundles have entities that extend entities in 3rd party bundles. The configurations/annotations found in the base classes isn't being picked up by doctrine though. The 3rd party bundles use annotations for the orm configuration so in my classes that extend those, i chose annotation as well.
MyCompanyAuthBundle has entities that extend entities in the FOSOAuthServerBundle bundle. MyCompanyProfileBundle has one entity that extends an entity in the JnsXhprofBundle bundle.
Now that i'm having to manually configure the mappings sections in my config.yml, i can't figure out how to tell doctrine to also use the entities base class annotation configuration found in the 3rd party bundles.
Before i started trying to use two connections, i just used the auto_mapping flag in the orm config and it worked great with my single connection.
Anyone know what i'm doing wrong here?
Here is the doctrine part of my config.yml.
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: %database_name%_%kernel.environment%
user: "%database_user%"
password: "%database_password%"
charset: UTF8
xhprof:
driver: "%database_driver2%"
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
MyCompanyCoreBundle: ~
MyCompanyAuthBundle:
type: annotation
xhprof:
connection: xhprof
mappings:
MyCompanyProfileBundle: ~
JnsXhprofBundle: ~
Figured it out. Easier than i expected!
Just needed to add the bundles that also have mapping.
My working config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: %database_name%_%kernel.environment%
user: "%database_user%"
password: "%database_password%"
charset: UTF8
xhprof:
driver: "%database_driver2%"
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
MyCompanyCoreBundle: ~
MyCompanyAuthBundle: ~
FOSOAuthServerBundle: ~
xhprof:
connection: xhprof
mappings:
MyCompanyProfileBundle: ~
JnsXhprofBundle: ~
I'm following this guide on reverse engineering a database. The guide says it uses the paramters.yml file for the database parameters, but how can I override this? I have several connections listed in my config.yml, and I'd like to be able to choose one of them.
Use the --em parameter to specify which entity manager you want to use.
doctrine:mapping:convert [--filter="..."] [--force] [--from-database] [--extend[="..."]] [--num-spaces[="..."]] [--namespace[="..."]] [--em[="..."]] to-type dest-path
If you assign each Doctrine connection to its own Entity Manager, then you can specify the entity manager with the --em="entity_manager_name" flag. However, you will have to manually map each bundle to an entity manager. In the following example config, the other connection and entity manager are named customer
$ php app/console doctrine:mapping:convert yml ./src/Acme/CustomerBundle/Resources/config/doctrine/metadata/orm --em="customer" --from-database --force
config.yml
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
customer:
driver: %database_driver2%
host: %database_host2%
port: %database_port2%
dbname: %database_name2%
user: %database_user2%
password: %database_password2%
charset: UTF8
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AcmeDemoBundle: ~
AcmeStoreBundle: ~
customer:
connection: customer
mappings:
AcmeCustomerBundle: ~
I had 5 minutes ago a full setup with FOS userBundle which was working. Then i decided to use multiple / shared db connections. And now i've got :
MyNamespace\UserBundle\Entity\User is not a valid entity or mapped super class.
Here's the setting.
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
shared:
driver: %database_shared_driver%
host: %database_shared_host%
port: %database_shared_port%
dbname: %database_shared_name%
user: %database_shared_user%
password: %database_shared_password%
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
MyNonSharedBundle: ~
shared:
connection: shared
mappings:
MyUserBundle: ~
FOSUserBundle: ~
PS: If i Move MyUserBundle and FosUserBundle under the default connection, it works.
That means something is trying to work with your entity through default entity manager. Did you configure FOSUserBundle?
fos_user:
model_manager_name: "shared"