Symfony3 / Doctrine - function:用外键添加行

时间:2016-07-25 14:09:58

标签: php doctrine foreign-key-relationship symfony

我刚刚开始使用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的实例。

谢谢!

0 个答案:

没有答案