数時間をかけて理解しようとすると、概念を明確にすることができません。示すように、Iは、3つのエンティティを定義している:Doctrineエンティティの関係混乱
class Countries
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="flag", type="string", length=100, nullable=true)
*/
private $flag;
/**
* @ORM\OneToMany(targetEntity="Regions", mappedBy="country_id")
*/
private $regions_in_country;
/**
* @ORM\OneToMany(targetEntity="Cities", mappedBy="country_id")
*/
private $cities_in_country;
public function __construct() {
$this->regions_in_country= new ArrayCollection();
$this->cities_in_country= new ArrayCollection();
}
}
class Regions
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
/**
* @var int
*
* @ORM\Column(name="country_id", type="integer")
* @ORM\ManyToOne(targetEntity="Countries", inversedBy="regions")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id")
*/
private $countryId;
/**
* @ORM\OneToMany(targetEntity="Cities", mappedBy="region_id")
*/
private $cities_in_region;
public function __construct() {
$this->cities_in_region= new ArrayCollection();
}
}
class Cities
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="country_id", type="integer")
* @ORM\ManyToOne(targetEntity="Countries", inversedBy="cities_in_country")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id")
*/
private $countryId;
/**
* @var int
*
* @ORM\Column(name="region_id", type="integer")
* @ORM\ManyToOne(targetEntity="Regions", inversedBy="cities_in_region")
* @ORM\JoinColumn(name="region_id", referencedColumnName="id")
*/
private $regionId;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=100)
*/
private $name;
}
問題は、プロファイラが言うことです:
AppBundle\Entity\Regions
The association AppBundle\Entity\Regions#cities_in_region refers to
the owning side field AppBundle\Entity\Cities#region_id which does not exist.
しかしAppBundle \エンティティのフィールドのregion_id \都市は存在する!!
提案がありますか?
EDITED: RafixとAlvinのコンセプトに感謝します。私はDoctrine/Symfonyといくつかの時代の新人です...
実際に私がしたいのは、SelectにCountryTypeフィールドを持つselectを使用することです。それはcode_2aを値として使用することです。
私のエンティティでは、user_profileのように、エンティティのCountryに「code_2a」、OneToOneというフィールド国を設定し、Regionエンティティでこのフィールドを使用します。つまり、Countryエンティティは、Region Entityを指すフィールド 'code_2a' OneToManyを持ちます。これは、 'code_2a' ManyToOneがCountryに戻ることを意味します。彼らは 'イド'ではないので、私はそれをどうやって行うのだろう。それを行う方法を示す例はありません。
あなたのコードでは、Cityエンティティの属性$ regionに列定義がありませんか?地域の$ countryと同じです。それはタイプミスですか? アソシエーションAppBundle \ Entity \ Region#citiesは、関連付けとして定義されていないが、フィールドとして所有サイドフィールドAppBundle \ Entity \ City#regionを参照しています。 アソシエーションAppBundle \ Entity \ Region#citiesは、存在しない所有サイドフィールドAppBundle \ Entity \ City#regionを参照します。 – Carlos
今、私は、私のエラー、おかげで、rafixを参照してください。あなたはタイプミスをしていません。 M-t-O列はJoinColumnでなければなりません。これがキーです。お役に立てれば。 – Carlos