Propel - connection not defined for database "default"

I'm struggling to connect to the database. I created the mapped classes and tables using propel reverse "..." and created the following structure:

Solution structure

propel.ini

 [propel] # A better Pluralizer propel.builder.pluralizer.class = builder.util.StandardEnglishPluralizer 

propel.xml

 <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <config> <propel> <general> <project>PHP-PlayArea</project> <version>2.0.0-dev</version> </general> <database> <connections> <connection id="default"> <adapter>mysql</adapter> <classname>Propel\Runtime\Connection\ConnectionWrapper</classname> <dsn>mysql:host=localhost;dbname=test</dsn> <user>me</user> <password>blahblahblah</password> <settings> <charset>utf8</charset> </settings> </connection> </connections> </database> <runtime> <defaultConnection>default</defaultConnection> <connection>default</connection> </runtime> <generator> <defaultConnection>default</defaultConnection> <connection>default</connection> </generator> </propel> </config> 

Propel.php

 <?php namespace propel; use Propel\Runtime\Propel; Propel::init("../propel/propel.xml"); 

I have the following unit test that crashes:

 // Include the main Propel script require_once '../propel/Propel.php'; require_once '../propel/Base/Users.php'; require_once '../propel/Map/UsersTableMap.php'; require_once '../propel/Users.php'; use propel\Users; const name = 'gareth'; class PropelTests extends \PHPUnit_Framework_TestCase { public function testAddUser() { // create a user ? $user = new Users(); // brings back an empty config $manager = new ConfigurationManager(); //Get the array of runtime configured connections $connections = $manager->get(); // *** fails here *** // test connections $con = Propel::getWriteConnection(UsersTableMap::DATABASE_NAME); $con = Propel::getReadConnection(UsersTableMap::DATABASE_NAME); 

Output;

 C:\wamp\bin\php\php5.5.12\php.exe -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 C:\Users\gareth\AppData\Local\Temp\ide-phpunit.php --no-configuration Tests\PropelTests C:\Development\PHP-PlayArea\Tests\Propel.Tests.php Testing started at 11:40 ... <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <config> <propel> <!-- full config as above --> </propel> </config> No connection defined for database "default". Did you forget to define a connection or is it wrong written? C:\Development\PHP-PlayArea\vendor\propel\propel\src\Propel\Runtime\ServiceContainer\StandardServiceContainer.php:279 C:\Development\PHP-PlayArea\vendor\propel\propel\src\Propel\Runtime\ServiceContainer\StandardServiceContainer.php:355 C:\Development\PHP-PlayArea\propel\Base\Users.php:655 C:\Development\PHP-PlayArea\Tests\Propel.Tests.php:29 

Any ideas? I am a little puzzled ... My configuration seems good, but obviously it is not.

Update: 2015/07/06 13:01: After debugging, it looks like it is bombing because it could not find the connection managers

Runtime propel variables

+6
source share
2 answers

I am just learning Propel and I had the same problem.

I tried to do what you did here:

 Propel::init("../propel/propel.xml"); 

All that has been done is to include the file and print the contents in the output in the same way as in your output.

I finally got it, effectively replacing Propel.php:

 <?php use Propel\Common\Config\ConfigurationManager; use Propel\Runtime\Connection\ConnectionManagerSingle; use Propel\Runtime\Propel; // Load the configuration file $configManager = new ConfigurationManager( '../propel/propel.xml' ); // Set up the connection manager $manager = new ConnectionManagerSingle(); $manager->setConfiguration( $configManager->getConnectionParametersArray()[ 'default' ] ); $manager->setName('default'); // Add the connection manager to the service container $serviceContainer = Propel::getServiceContainer(); $serviceContainer->setAdapterClass('default', 'mysql'); $serviceContainer->setConnectionManager('default', $manager); $serviceContainer->setDefaultDatasource('default'); 

Hope this helps

+5
source

Missing port number in the line below in propel.xml:

  <dsn>mysql:host=localhost:<<port number>>;dbname=test</dsn> 

Also check the database name in the schema.xml file if you have reverse engineering from an existing schema. Make sure it is not empty.

+1
source

All Articles