我有3个实体Users
,UserProfile
和Staffs
用户个人资料通过用户ID链接到Users表 Staff表使用userprofileid
链接到userprofile管理员创建用户个人资料并生成注册号,用户名和密码。
我想在users表中添加用户记录,然后添加用户配置文件,然后将配置文件ID添加到staff表中。
我想按顺序坚持三个实体
我尝试为像
这样的用户创建一个实例$this->userent->setUsername('xxx');
$this->em->persist($this->userent);
$this->em->flush();
然后:
$this->profileent->setFirstname('xxx');
$this->em->persist($this->profileent);
$this->em->flush();
基本上,表单在三个实体之间共享,我想按顺序插入三个表,
更新
除了users
实体我有一个usertype
实体链接到用户...我想只保留外键。我有
setUserType(Usertype $userType)
方法用户
当我做的时候
$this->userent = new Users();
$this->userent->setUserType($this->em->getRepository('\Campus\Entity\Usertype')->findByUserType("admin"))
我收到错误
Argument 1 passed to Campus\Entity\Users::setUserType() must be an instance of Campus\Entity\Usertype, array given
如果我传递数组的值,该数组是Usertype
的实例我得到一个错误,说需要一个ArrayCollection..help的数组请!!!
Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in D:\xampp\htdocs\zend\library\Doctrine\ORM\UnitOfWork.php on line 406 defined in D:\xampp\htdocs\zend\library\Doctrine\Common\Collections\ArrayCollection.php on line 46
答案 0 :(得分:5)
少考虑数据库,以及有关对象的更多信息。这就是学说的全部内容。
你想要这样的东西:
<?php
// create some entities
$user = new Entity\User();
$user->setUsername('userman');
$profile = new Entity\UserProfile();
$profile->setFirstname('joe');
$profile->setLastname('smith');
$staff = new Entity\Staff();
$staff->setSomething('value-for-something');
// associate those entities together
$profile->setStaff($staff);
$user->setProfile($profile);
// assuming you have set up cascade={"persist"} on your associations
$this->em->persist($user);
// if you haven't set up cascade={"persist"}, you will need to call persist on each entity:
// $this->em->persist($profile);
// $this->em->persist($staff);
$em->flush();
所以,基本的想法是你构建你的对象,让它们进入Doctrine的工作单元(通过调用persist()并可能设置一些级联),然后在一个事务中将它们全部写入数据库通过调用flush()
答案 1 :(得分:1)
您可以持久保存每个实体,然后在最后一次刷新()。
如果您的实体之间存在关系,则可以检查以下注释
cascade={"persist"}
“Cascades将操作持久保存到相关实体。”