【发布时间】:2020-04-18 15:11:40
【问题描述】:
我正在尝试从数据库中获取一个项目并将其传递给一个新项目以推送到数据库。
$post = $entityManager->getRepository('App:Post')
->find($id);
$comment->setPost($post)
setPost 如下所示:
public function setPost(Post $post): self
{
$this->post = $post;
return $this;
}
和$post 变量:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Post", inversedBy="comments")
* @ORM\JoinColumn(nullable=false)
*/
private $post;
但是当我尝试将帖子设置为 setPost($post) 时,它给了我以下错误:
'\App\Entity\Post' 类型的预期参数,'object' 提供
【问题讨论】:
-
'App:Post'看起来有点不对劲,你试过Post::class(使用适当的use子句)吗? -
同样的问题,我试过
App:Post,因为我是在网上找到的。当我转储 `$post` 时,输出是正确的。我从中得到了所有正确的数据。 -
App:Post 和 Post::class 就检索存储库而言是相同的。 Doctrine 只有一个处理 App:Post 的命名空间系统。 Post::class 可能是更好的选择,因为您的 IDE 会提供更多帮助。就问题而言,既然您确认 $post 是预期的类,那么可能正在执行其他一些代码?也许暂时从 setPost 中删除 typehint 看看会发生什么。
-
@Cerad 当我从
SetPost中删除Post时它可以工作,所以现在它是SetPost($post)。但我不知道为什么它有效,以及它是否是好的做法。 -
这不是一个好习惯。您的 Post 实体和 Comment 实体是否在同一个命名空间中,即 App\Entity\Comment?我想您也可以尝试神奇地清除缓存。 php版本?如果可能,请尝试转到 7.4.4。
标签: symfony object doctrine relation many-to-one