学说,如何离开加入一个没有生成的实体?

时间:2016-02-28 19:47:39

标签: php entity-framework symfony doctrine-orm doctrine

我有权利:

data=

和个人资料:

url = "http://imgup.net/upload"
data = {'utf8': '&#x2713;', 'authenticity_token': '<put your scraped token here>', '_method': 'put'}
f = open("dhs.jpg", "rb")  # open in binary mode
files = {'image[image][]': f}
r = requests.post(url, files=files, data=data)
f.close()
print(r.json()["image_link"]

我想将CREATE TABLE `rights` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE INDEX `U_name` (`name`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `profile` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE INDEX `U_name` (`name`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; 以及个人资料相关联:

profiles

更好的概述:enter image description here

所以我生成实体:

  

php apps / doctrine.php dev orm:generate-entities libs / --no-backup   --extend =&#34; \学说\实体\ BaseEntity&#34;

这里出现了问题。 rightsCREATE TABLE `profile_profile` ( `profile_id1` INT(10) UNSIGNED NOT NULL DEFAULT '0', `profile_id2` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`profile_id1`, `profile_id2`), INDEX `I_profile_id2` (`profile_id2`), CONSTRAINT `FK_profile_profile-profile-1` FOREIGN KEY (`profile_id1`) REFERENCES `profile` (`id`) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT `FK_profile_profile-profile-2` FOREIGN KEY (`profile_id2`) REFERENCES `profile` (`id`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `profile_right` ( `profile_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', `right_id` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`profile_id`, `right_id`), INDEX `I_right_id` (`right_id`), CONSTRAINT `FK_profile_right-profile` FOREIGN KEY (`profile_id`) REFERENCES `profile` (`id`) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT `FK_profile_right-rights` FOREIGN KEY (`right_id`) REFERENCES `rights` (`id`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='utf8_general_ci' ENGINE=InnoDB; 实体已创建,而ProfileRights则未创建。那么如何使用它们?

2 个答案:

答案 0 :(得分:2)

如果要在ManyToMany关系上访问加入实体,则需要将其分解为OneToMany,ManyToOne。

E.g。

简介 - OneToMany&lt; ProfileRight&gt; ManyToOne - 简介。

你是否应该是另一个问题。如果要在连接表上存储额外数据,需要执行此操作。

根据您所拥有的内容,获取个人资料的权利变得微不足道。对于您加载的任何个人资料,只需致电

 $profile->getRights() 

和doctrine将(假设您生成的实体映射是正确的)根据连接表透明地为您获取所有关联的权限实体。

同样,如果您向个人资料添加权利:

$right = new Right();
$profile->addRight($right);

Doctrine将透明地为您添加连接表条目。

答案 1 :(得分:2)

在学说中,连接表不由实体表示。

您可以在实体中找到@ORM\ManyToMany,其中包含@ORM\JoinTable以及有关您关联的所有信息。
这是连接表的表示,使用@Richard所说的getter和setter来访问它们。

Associations mapping中获取更多信息(以查看所有类型的关联)和Working with associations(了解如何使用它们)文档的章节。

希望你对学说有很好的经验。

修改

在更多地查看您的UML之后,至少有一个关联不需要多对多(如第一个答案所述),但是如果它们确实在SQL中有连接表,那么您导入了通过逆向工程,它们肯定会与SQL中的一样(带连接表的多对多)。