示例#1
0
 /**
  * Gets an already-opened read PDO connection or opens a new one for passed-in db name.
  *
  * @param      string $name The datasource name that is used to look up the DSN
  *                          from the runtime configuation file. Empty name not allowed.
  *
  * @return     PDO A database connection
  *
  * @throws     PropelException - if connection cannot be configured or initialized.
  */
 public static function getSlaveConnection($name)
 {
     if (!isset(self::$connectionMap[$name]['slave'])) {
         $slaveconfigs = isset(self::$configuration['datasources'][$name]['slaves']) ? self::$configuration['datasources'][$name]['slaves'] : null;
         if (empty($slaveconfigs)) {
             // no slaves configured for this datasource
             // fallback to the master connection
             self::$connectionMap[$name]['slave'] = self::getMasterConnection($name);
         } else {
             // Initialize a new slave
             if (isset($slaveconfigs['connection']['dsn'])) {
                 // only one slave connection configured
                 $conparams = $slaveconfigs['connection'];
             } else {
                 // more than one sleve connection configured
                 // pickup a random one
                 $randkey = array_rand($slaveconfigs['connection']);
                 $conparams = $slaveconfigs['connection'][$randkey];
                 if (empty($conparams)) {
                     throw new PropelException('No connection information in your runtime configuration file for SLAVE [' . $randkey . '] to datasource [' . $name . ']');
                 }
             }
             // initialize slave connection
             $con = Propel::initConnection($conparams, $name);
             self::$connectionMap[$name]['slave'] = $con;
         }
     }
     // if datasource slave not set
     return self::$connectionMap[$name]['slave'];
 }