Symfony 1.4 / Doctrine 1.2 ProjectConfiguration PluginConfiguration Doctrine Event Listeners

References

Events

  • doctrine.configure
  • doctrine.configure_connection

Handled by Doctrine in sfDoctrineDatabase::initialize() e.g. L119

/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineDatabase.class.php

 

Usage in ProjectConfiguration or PluginConfiguration

  • config/ProjectConfiguration.class.php or e.g.
  • plugins/ullCorePlugin/config/ullCorePluginConfiguration.class.php
class ullCorePluginConfiguration extends sfPluginConfiguration
{
  public function setup()
  {
    $this->dispatcher->connect('doctrine.configure_connection',
        array('ullCorePluginConfiguration',  'configureDoctrineConnection')
    );
  }

  /**
   * Configure doctrine connection globally for ullright/ullCorePlugin
   * @param sfEvent $event
   */
  public static function configureDoctrineConnection(sfEvent $event)
  {
    $connection = $event['connection'];
    
    // Configure MySQL compatiblity mode for MySQL >= 5.7
    $connection->addListener(new Doctrine_Event_Listener_Mysql_Mode());
  }

}


plugins/ullCorePlugin/lib/Doctrine_Event_Listener_Mysql_Mode.class.php

class Doctrine_Event_Listener_Mysql_Mode extends Doctrine_EventListener
{
  public function postConnect(Doctrine_Event $event)
  {
    $conn = $event->getInvoker();
    //$conn->execute('SET SESSION sql_mode=""');
    $conn->execute("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
  }
}

The example above is the solution for Symfony 1.4 usage with MySQL > 5.7 and error "SQLSTATE[HY000]: General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'xxxxxxx' which is not in SELECT list; this is incompatible with DISTINCT