我在Doctrine 2
方面遇到了一些问题-我有一个预先存在的实体,名为Site
,其中包含数据(即具有一些行的表),该实体与一个名为User
的实体具有oneToMany
关系。
我的User
实体与Site
具有manyToOne
关系。
当创建一个新的用户实体时,我想将它链接到一个特定的网站。我的代码如下:
// create entity manager instance
$em = 'Doctrine'ORM'EntityManager::create($connection, $config);
// get the site ID entry i'd like to insert into this user
$site = $em->createQuery('SELECT s FROM Entity'Site s WHERE s.name = ?1')->setParameter(1, 'My Site')->getResult();
// create new user
$obj = new 'Entity'User;
// associate user with site
$obj->setJoiningSite($site[0]);
$em->persist($obj);
$em->flush();
$em->clear();
现在我的问题是:多次运行此代码片段会为每个新用户实体创建一个新的站点实体,即它不是使用单个现有站点,而是每次创建一个新站点。
以下是我的YAML
文件的相关部分。第一个站点:
Entity'Site:
type: entity
table: sites
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
length: 100
oneToMany:
users:
targetEntity: Entity'User
mappedBy: site
这里是User
:
Entity'User:
type: entity
table: users
id:
id:
type: integer
generator:
strategy: AUTO
fields:
username:
type: string
length: 20
manyToOne:
joining_site:
targetEntity: Entity'Site
mappedBy: users
cascade: ["persist"]
joinColumn:
name: join_site_id
referencedColumnName: id
它为什么要这样做,我如何才能得到我想要的行为?
感谢
尝试使用这个:
$site = $em->getRepository('Entity'User')->findOneBy(array('name' => [name_of_site]));
$user = new Entity'User();
$user->setJoiningSite($site);
$em->persist($user);
$em->flush();
你的方法是这样的:
public function setJoiningSite($site) {
$this->site = $site;
}
您必须将站点属性声明为Entity''site类。