我一直在做直接的 MySQL 很长一段时间,现在我正在尝试以 ORM 的方式做事。我有一个用户创建设计的网站。Design 表有一个映射到 User.id 的字段“userId”。Design 实体有一个值 $user,它定义了实体之间的关系:
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="userId", referencedColumnName="id")
*/
private $user;
很好,我现在可以加载一个设计实体并使用 $design->user->lastname 获取用户的姓氏。
现在假设用户创建了一个新设计。我将实体保存为:
$design = new Design();
$design->setTitle($_POST['title']);
$design->setUserId($_POST['userId']);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($design);
$em->flush();
当我这样做时,它会失败并显示不允许空值的 userId 为空的消息。我以为我可能错误地传递了它,但是当我从 Design 实体中删除 $user 时它工作正常,所以我认为它也期望传递一个用户对象,例如:
$design->user = new User($userId)
当我已经知道我所需要的 ID 时,我真的不想添加数据库调用来获取整个用户。处理这个最简单的方法是什么?