跨数据库连接原则
Cross Database Joins Doctrine
我的 Doctrine 中有 2 个与 ZF2 的连接,但我需要在 twoo 数据库中进行连接。最大的问题是:是否可以对位于不同数据库和连接中的两个表执行连接?
'connection' => array(
// Default DB connection
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'user' => 'root',
'port' => '3306',
'password' => '',
'dbname' => 'MYSQL_TEST',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
)
),
),
// Alternative DB connection
'orm_alternative' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOSqlsrv\Driver',
'params' => array(
'host' => 'localhost',
'user' => 'sa',
'port' => '',
'password' => 'test',
'dbname' => 'MSSQL_TEST',
),
),
),
实体MYSQL示例:
/**
* mysql_test
*
* @ORM\Table(name="mysql_table")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @ORM\Entity(repositoryClass="MYSQL\Entity\TestRepository")
*/
class Test
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="MSSQL\Entity\Test")
* @ORM\JoinColumn(name="id_mssql", referencedColumnName="id_mssql")
*/
private $mssql;
我想在这两个连接之间进行连接:(
不幸的是,您可能正在寻找的简短答案是否。
有两个单独的连接(mysql 和 mssql 在您的情况下)共享数据的方法,如果您喜欢冒险,this post 可能会引导您走上正确的道路。
但我建议仅从每个连接中分别选择您的数据,然后通过匹配每个结果中的公用键在 php
中对其进行操作,从而从本质上模拟连接。
我的 Doctrine 中有 2 个与 ZF2 的连接,但我需要在 twoo 数据库中进行连接。最大的问题是:是否可以对位于不同数据库和连接中的两个表执行连接?
'connection' => array(
// Default DB connection
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'user' => 'root',
'port' => '3306',
'password' => '',
'dbname' => 'MYSQL_TEST',
'driverOptions' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"
)
),
),
// Alternative DB connection
'orm_alternative' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOSqlsrv\Driver',
'params' => array(
'host' => 'localhost',
'user' => 'sa',
'port' => '',
'password' => 'test',
'dbname' => 'MSSQL_TEST',
),
),
),
实体MYSQL示例:
/**
* mysql_test
*
* @ORM\Table(name="mysql_table")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @ORM\Entity(repositoryClass="MYSQL\Entity\TestRepository")
*/
class Test
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="MSSQL\Entity\Test")
* @ORM\JoinColumn(name="id_mssql", referencedColumnName="id_mssql")
*/
private $mssql;
我想在这两个连接之间进行连接:(
不幸的是,您可能正在寻找的简短答案是否。
有两个单独的连接(mysql 和 mssql 在您的情况下)共享数据的方法,如果您喜欢冒险,this post 可能会引导您走上正确的道路。
但我建议仅从每个连接中分别选择您的数据,然后通过匹配每个结果中的公用键在 php
中对其进行操作,从而从本质上模拟连接。