diff --git a/cookbook/en.txt b/cookbook/en.txt index db1b174..cb71d12 100644 --- a/cookbook/en.txt +++ b/cookbook/en.txt @@ -5,4 +5,5 @@ + Implementing wakeup or clone + Integrating with CodeIgniter + DQL Custom Walkers -+ DQL User Defined Functions \ No newline at end of file ++ DQL User Defined Functions ++ SQL Table Prefixes \ No newline at end of file diff --git a/cookbook/en/sql-table-prefixes.txt b/cookbook/en/sql-table-prefixes.txt new file mode 100644 index 0000000..eb79299 --- /dev/null +++ b/cookbook/en/sql-table-prefixes.txt @@ -0,0 +1,51 @@ +This recipe is intended as an example of implementing a loadClassMetadata listener to provide a Table Prefix option for your application. The method used below is not a hack, but fully integrates into the Doctrine system, all SQL generated will include the appropriate table prefix. + +In most circumstances it is desirable to separate different applications into individual databases, but in certain cases, it may be beneficial to have a table prefix for your Entities to separate them from other vendor products in the same database. + +++ Implementing the listener + +The listener in this example has been set up with the DoctrineExtensions namespace. You create this file in your library/DoctrineExtensions directory, but will need to set up appropriate autoloaders. + + [php] + _prefix = (string) $prefix; + } + + public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) + { + $classMetadata = $eventArgs->getClassMetadata(); + $classMetadata->setTableName($this->_prefix . $classMetadata->getTableName()); + } + } + +++ Telling the EntityManager about our listener + +A listener of this type must be set up before the EntityManager has been initialised, otherwise an Entity might be created or cached before the prefix has been set. + +> **Note** +> If you set this listener up, be aware that you will need to clear your caches +> and drop then recreate your database schema. + + [php] + addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePrefix); + + $em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config, $evm); +