您可以嘗試實施並使用您自己的driver_class並將PDO DriverOptions中的search_path傳遞給在的symfony配置:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_pgsql
driver_class: YourNamespace\YourBundle\Doctrine\DBAL\Driver\PDOPgSql\Driver
options:
search_path: YOUR_SEARCH_PATH
司機可能是這個樣子:
namespace YourNamespace\YourBundle\Doctrine\DBAL\Driver\PDOPgSql;
use Doctrine\DBAL\Platforms;
class Driver extends \Doctrine\DBAL\Driver\PDOPgSql\Driver implements \Doctrine\DBAL\Driver
{
public function connect(array $params, $username = null, $password = null, array $driverOptions = array())
{
// ADD SOME ERROR HANDLING WHEN THE SEARCH_PATH IS MISSING...
$searchPath = $driverOptions['search_path'];
unset($driverOptions['search_path']);
$connection = new \Doctrine\DBAL\Driver\PDOConnection(
$this->_constructPdoDsn($params),
$username,
$password,
$driverOptions
);
$connection->exec("SET SEARCH_PATH TO {$searchPath};");
return $connection;
}
/**
* Constructs the Postgres PDO DSN.
*
* @return string The DSN.
*/
protected function _constructPdoDsn(array $params)
{
$dsn = 'pgsql:';
if (isset($params['host']) && $params['host'] != '') {
$dsn .= 'host=' . $params['host'] . ' ';
}
if (isset($params['port']) && $params['port'] != '') {
$dsn .= 'port=' . $params['port'] . ' ';
}
if (isset($params['dbname'])) {
$dsn .= 'dbname=' . $params['dbname'] . ' ';
}
return $dsn;
}
}
需要,因爲作爲\原則\ DBAL \驅動程序\ PDOPgSql \保護它沒有定義_constructPdoDsn方法驅動程序。這有點「哈克」,因爲我們正在使用PDO DriverOptions,而且我不確定這是否是一種好方法 - 但它似乎起作用。
希望這會有所幫助。
最好的問候,
Patryk
Symfony2只是使用原則,你應該能夠以完全相同的方式解決它。 – hakre
是的。但我不知道我應該到哪裏進入:(im絕對新到symfony2 ... –
尋找EntityManager以及如果什麼都沒有,grep是你的朋友 – hakre