我刚刚开始使用Symfony3(和php)进行冒险,我遇到了一个问题。
此时我的应用程序应该允许用户CRUD他的项目。显示工作正常,但我有创建问题。
我有两个表:用户和项目。 项目表包含所有项目数据,包括项目所有者,基本上是用户的ID。 感谢Symfony文档,我设法映射了两个表:
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="projects")
* @ORM\JoinColumn(name="uid", referencedColumnName="id")
*/
private $uid;
/**
* Set uid
*
* @param \AppBundle\Entity\User $uid
*
* @return Project
*/
public function setUid(\AppBundle\Entity\User $uid = null)
{
$this->uid = $uid;
return $this;
}
/**
* Get uid
*
* @return \AppBundle\Entity\User
*/
public function getUid()
{
return $this->uid;
}
private $projects;
public function __construct()
{
$this->projects = new ArrayCollection();
}
此时我可以显示完整的项目信息,即项目标题+项目所有者详细信息。 问题始于实现基本功能,如创建新项目。
我正在关注该文档:http://symfony.com/doc/current/book/doctrine.html#saving-related-entities。 问题是 - 我不想创建新用户,只需将现有用户分配给新项目。 为此,我在项目控制器中创建了一个新功能:
/**
* @Route("/projects/create/", name="project_create")
*/
public function createProject()
{
$project = new Project();
$project->setTitle('WebProject');
$project->setDescription('asdfghjkgfdsadfghgfdsdfg');
$project->setLogo('asdf');
$project->setCreatedat(time());
$project->setDateline('-');
// relate this product to the category
$project->setUid(1);
$em = $this->getDoctrine()->getManager();
$em->persist($project);
$em->flush();
return new Response(
'Saved new product with id: '.$project->getId()
);
}
此函数应该添加新项目并将ID为1的User设置为项目的所有者。正如我所料,它不起作用。 错误:
捕获致命错误:传递给AppBundle \ Entity \ Project :: setUid()的参数1必须是AppBundle \ Entity \ User的实例,给定整数,在...中调用...
嗯,的确,这是真的。但我不知道如何通过它的ID传递User的实例。
谢谢!