我正在开发一个Symfony 4 Web项目,并且每个客户端都有一个数据库,因此,在每个请求中,我都必须基于客户端ID连接到数据库。
如何使用主义来手动连接数据库?
/**
* @Route("/api/log", name="log", methods={"GET"})
*/
public function log(Request $request)
{
$this->denyAccessUnlessGranted(['ROLE_CLIENT','ROLE_ADMIN']);
$clientId = $request->query->get('client_id');
$dbName = 'project_'.$clientId;
//I have database credentials: $host,$port,$username,$password & $dbName:
$this->getDoctrine()->........
您可以使用多个连接和管理员。这里是official symfony documentation。
因此,如果您可以手动更改config / packages / doctrine.yaml,则将解决您的问题。
另一种方法是直接与实体管理器一起工作:
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
$paths = array('/path/to/entity/mapping/files');
$config = Setup::createAnnotationMetadataConfiguration($paths);
$dbParams = array('driver' => 'pdo_sqlite', 'memory' => true);
$entityManager = EntityManager::create($dbParams, $config);