Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Doctrine2-哪种方法更合适?_Mysql_Sql_Mongodb_Doctrine Orm_Database - Fatal编程技术网

Mysql Doctrine2-哪种方法更合适?

Mysql Doctrine2-哪种方法更合适?,mysql,sql,mongodb,doctrine-orm,database,Mysql,Sql,Mongodb,Doctrine Orm,Database,所需数据保存在mysql中。但是,可为空的数据保存在mongodb中。此外,MongoDB将快速读取数据。通过这种方式,负载被分配。所以,我使用两个数据库 第一条路 /** * @MongoDB\Document(collection="settings") */ class Settings { /** * @MongoDB\Id */ protected $id; /** * @MongoDB\Field(type="int")

所需数据保存在mysql中。但是,可为空的数据保存在mongodb中。此外,MongoDB将快速读取数据。通过这种方式,负载被分配。所以,我使用两个数据库

第一条路

/**
 * @MongoDB\Document(collection="settings")
 */
class Settings
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\Field(type="int")
     */
    protected $userid;

    /**
     * @MongoDB\Field(type="hash")
     */
    protected $data;
}
Mysql数据库模式

/**
 * @MongoDB\Document(collection="settingsData")
 */
class SettingsData
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\Field(type="int")
     */
    protected $settingsid;

    /**
     * @MongoDB\Field(type="hash")
     */
    protected $data;

}
Settings.php

/**
 * @ORM\Entity
 * @ORM\Table(name="settings")
 */
class Settings
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="integer")
     */
    protected $userid;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="settings")
     * @ORM\JoinColumn(name="userid", referencedColumnName="id")
     */
    protected $user;

Mongodb数据库模式

/**
 * @MongoDB\Document(collection="settingsData")
 */
class SettingsData
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\Field(type="int")
     */
    protected $settingsid;

    /**
     * @MongoDB\Field(type="hash")
     */
    protected $data;

}
通过这种方法,我可以建立一个关系数据库。但是,我需要打开一个额外的表(mysql->settingtable)。我使用Doctrine2事件监听器处理实体文档关系

第二种方式

/**
 * @MongoDB\Document(collection="settings")
 */
class Settings
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\Field(type="int")
     */
    protected $userid;

    /**
     * @MongoDB\Field(type="hash")
     */
    protected $data;
}
在这个方法中,我可以直接添加数据。不需要额外的表来检索数据。我只需要写额外的代码。但关系破裂了。代码将很难遵循。(我在大多数系统中使用了第一种方法,但它们只是MySQL。)


问题,;如果同时使用Doctrine ORM和MongoDB ODM,您可以利用哪个方法来映射MySQL实体和MongoDB文档之间的引用。它显然不会提供任何类型的引用完整性,但它允许您通过应用程序中的getter方法和代理对象轻松地导航关系(例如,无需收集整数ID并发出SQL查询)

根据您的模式,您似乎只将MongoDB用于映射为散列类型(MongoDB对象)的
$data
属性。实际上,您并没有使用嵌入文档为此属性定义架构,因此我假设您并没有实际查询此字段,它只是存储任意键/值数据。如果是这样,将键/值数据存储为序列化或JSON字符串是否会更简单?ORM甚至有一个
json\u数组
用于此目的。

您不能使用它吗?