Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>You can dynamically adjust the table names ( and mappings ) by hooking into the <a href="http://docs.doctrine-project.org/en/latest/reference/events.html#load-classmetadata-event">doctrine event-system</a> with listeners/subscribers.</p> <p>i.e. "loadClassMetadata" is one of <a href="http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events">doctrine's events</a> you can create a listener/subscriber for as described in the cookbook article <a href="http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html">How to Register Event Listeners and Subscribers</a>.</p> <h2>Example</h2> <p><kbd>config.yml</kbd></p> <pre><code>services: mapping.listener: class: Acme\YourBundle\EventListener\MappingListener tags: - { name: doctrine.event_listener, event: loadClassMetadata } </code></pre> <p><kbd>MappingListener</kbd></p> <pre><code>use Doctrine\ORM\Event\LoadClassMetadataEventArgs; class MappingListener { public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) { $classMetadata = $eventArgs-&gt;getClassMetadata(); $table = $classMetadata-&gt;table; $oldName = $table['name']; // ... or $classMetaData-&gt;getTableName() // your logic here ... $table['name'] = 'new_table_name'; $classMetadata-&gt;setPrimaryTable($table); // ... or add a field-mapping like this $fieldMapping = array( 'fieldName' =&gt; 'about', 'type' =&gt; 'string', 'length' =&gt; 255 ); $classMetadata-&gt;mapField($fieldMapping); </code></pre> <p><a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Mapping/ClassMetadata.php">ClassMetadata</a> extends <a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php">ClassMetadataInfo</a> and provides a public variable "<a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php#L431">table</a>" ( containing the mapping information provided by your annotations or yml ) which you can modify !</p> <p>The public table variable is an array with the following entries:</p> <ul> <li>name => </li> <li>schema => </li> <li>indexes => array</li> <li>uniqueConstraints => array</li> </ul> <p>You can dynamically register event-listeners/subscribers in your controller prior to saving/updating.</p> <pre><code>$mappingListener = new MappingListener(); // ... maybe even modify the listener using reflection $evm = $this-&gt;get('doctrine')-&gt;getManager()-&gt;-&gt;getEventManager(); $evm-&gt;addEventListener('loadClassMetadata', $mappingListener); </code></pre> <hr> <p>Furthermore you can introduce multiple database connections/names and access them in your application. </p> <p><strong>app/config/config.yml</strong></p> <pre><code>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 </code></pre> <p>Then get different entity managers using ...</p> <pre><code> $em = $this-&gt;get('doctrine')-&gt;getManager('default'); $em2 = $this-&gt;get('doctrine')-&gt;getManager('customer'); </code></pre> <p>or repositories</p> <pre><code>$customers = $this-&gt;get('doctrine') -&gt;getRepository('AcmeCustomerBundle:Customer', 'customer') -&gt;findAll() ; </code></pre> <p>... or <a href="http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/connections.html">add connections</a> dynamically</p> <pre><code>$this-&gt;get('doctrine') -&gt;connection('mysql://username:password@localhost/test', 'dynamic_connection'); </code></pre> <p>Read more about the topic in the cookbook chapter <a href="http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html">How to work with Multiple Entity Managers and Connections</a>.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload