Symfony2,Doctrine2:多个自引用一对多关系

Symfony2,Doctrine2:多个自引用一对多关系,symfony,doctrine-orm,doctrine,symfony-2.1,symfony-2.3,Symfony,Doctrine Orm,Doctrine,Symfony 2.1,Symfony 2.3,我有这样一个数据库表: 现在,我想在州、城市和村庄之间进行一对多的自我引用 每个州有许多城市,每个城市有许多村庄 请注意,城市有两种关系: 多个城市->一个州 一个城市->多个村庄 我应该如何使用yml配置、实体注释和表单来实现这一点?我同意@GreenLeaf的观点,即您的模型是错误的。要保持常识,就不可能区分模型的两个记录是如何关联的 首先,您可能想了解数据库规范化: 第二,如果你真的坚持保持数据的完整性,你可以尝试进行许多创建,这样条令会创建3个额外的表,在那里你可以通过定义适当的

我有这样一个数据库表:

现在,我想在州、城市和村庄之间进行一对多的自我引用

每个州有许多城市,每个城市有许多村庄

请注意,城市有两种关系:

  • 多个城市->一个州

  • 一个城市->多个村庄


我应该如何使用yml配置、实体注释和表单来实现这一点?

我同意@GreenLeaf的观点,即您的模型是错误的。要保持常识,就不可能区分模型的两个记录是如何关联的

首先,您可能想了解数据库规范化:

第二,如果你真的坚持保持数据的完整性,你可以尝试进行许多创建,这样条令会创建3个额外的表,在那里你可以通过定义适当的字段名来区分关系的类型。阅读此处:让我们将您的表格命名为“Districts”,您可以尝试:

/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Cities",
 *      joinColumns={@JoinColumn(name="state_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *      )
 */


/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Villages",
 *      joinColumns={@JoinColumn(name="city_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="village_id", referencedColumnName="id")}
 *      )
 */

这可能适合你

我同意@GreenLeaf的观点,你的模型是错误的。要保持常识,就不可能区分模型的两个记录是如何关联的

首先,您可能想了解数据库规范化:

第二,如果你真的坚持保持数据的完整性,你可以尝试进行许多创建,这样条令会创建3个额外的表,在那里你可以通过定义适当的字段名来区分关系的类型。阅读此处:让我们将您的表格命名为“Districts”,您可以尝试:

/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Cities",
 *      joinColumns={@JoinColumn(name="state_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *      )
 */


/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Villages",
 *      joinColumns={@JoinColumn(name="city_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="village_id", referencedColumnName="id")}
 *      )
 */

这可能适合你

我同意@GreenLeaf的观点,你的模型是错误的。要保持常识,就不可能区分模型的两个记录是如何关联的

首先,您可能想了解数据库规范化:

第二,如果你真的坚持保持数据的完整性,你可以尝试进行许多创建,这样条令会创建3个额外的表,在那里你可以通过定义适当的字段名来区分关系的类型。阅读此处:让我们将您的表格命名为“Districts”,您可以尝试:

/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Cities",
 *      joinColumns={@JoinColumn(name="state_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *      )
 */


/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Villages",
 *      joinColumns={@JoinColumn(name="city_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="village_id", referencedColumnName="id")}
 *      )
 */

这可能适合你

我同意@GreenLeaf的观点,你的模型是错误的。要保持常识,就不可能区分模型的两个记录是如何关联的

首先,您可能想了解数据库规范化:

第二,如果你真的坚持保持数据的完整性,你可以尝试进行许多创建,这样条令会创建3个额外的表,在那里你可以通过定义适当的字段名来区分关系的类型。阅读此处:让我们将您的表格命名为“Districts”,您可以尝试:

/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Cities",
 *      joinColumns={@JoinColumn(name="state_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *      )
 */


/**
 * @ManyToMany(targetEntity="Districts")
 * @JoinTable(name="Villages",
 *      joinColumns={@JoinColumn(name="city_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="village_id", referencedColumnName="id")}
 *      )
 */

<>这可能对你工作

你的模型是错误的,考虑做3个实体:状态,锡蒂和自然村。然后,你将能够轻松地将它们与多个关系联系起来。+ 1 @ GrimeLe你是正确的,如果我可以添加建议:创建一个树模型,我想它会被容易地理解,很容易与真实生活状态->城市>村庄-你的模型是错误的,考虑做3个实体:州,锡蒂和自然村。然后,你将能够轻松地将它们与多个关系联系起来。+ 1 @ GrimeLe你是正确的,如果我可以添加建议:创建一个树模型,我想它会被容易地理解,很容易与真实生活状态->城市>村庄-你的模型是错误的,考虑做3个实体:州,锡蒂和自然村。然后,你将能够轻松地将它们与多个关系联系起来。+ 1 @ GrimeLe你是正确的,如果我可以添加建议:创建一个树模型,我想它会被容易地理解,很容易与真实生活状态->城市>村庄-你的模型是错误的,考虑做3个实体:州,锡蒂和自然村。然后,你就可以很容易地将它们与多个关系联系起来。+1@GreenLeaf你是对的,如果我可以添加建议的话:创建一个树模型,我想它很容易理解,很容易与现实生活中的状态->城市->村庄相比较。我编辑了我的模型,创建了3个具有一对多关系的实体,但问题仍然是它是什么!我编辑了我的模型,创建了3个具有一对多关系的实体,但问题仍然是它是什么!我编辑了我的模型,创建了3个具有一对多关系的实体,但问题仍然是它是什么!我编辑了我的模型,创建了3个具有一对多关系的实体,但问题仍然是它是什么!