Symfony学说:ManyToOne关系不起作用

时间:2016-09-06 10:11:03

标签: doctrine relationship symfony

我是Symfony的新手。我想创建一个博客网站。所以为此我创建了两个实体帖子和用户。我想我也正确地介绍了这两个实体,如下所述:

http://symfony.com/doc/current/doctrine/associations.html

的appbundle /实体/ post.php中:

...
/**
 * Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
 */
class Post
{   /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="post")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
    ....
}

的appbundle /实体/ user.php的:

...
/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 */
class User extends BaseUser
{
    /**
     * @ORM\OneToMany(targetEntity="Post", mappedBy="user")
     */
    private $post;
...
}

我已成功使用其userid(创建帖子的用户)保存帖子。但我无法实现这一点。即获取用户创建的所有帖子。我试图像这样实现它:

$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('AppBundle:User')->find($this->getUser()->getId());
dump($user->getPost());exit;

但我没有在变量中收到任何帖子。 (仅供参考:数据库中有用户ID的帖子)。以下是我上面提到的内容:

PostController.php on line 163:
PersistentCollection {#103 ▼
  -snapshot: []
  -owner: User {#76 ▶}
  -association: array:15 [ …15]
  -em: EntityManager {#374 …11}
  -backRefFieldName: "user"
  -typeClass: ClassMetadata {#80 …}
  -isDirty: false
  #collection: ArrayCollection {#102 ▼
    -elements: []
  }
  #initialized: false
}

注意:我正在使用FosUserBundle进行用户管理。不知道是否在这里提出问题。

任何帮助都将不胜感激。

谢谢,

Parth vora

1 个答案:

答案 0 :(得分:1)

我在这里得到了这个问题。以上所有代码都是正确的。我只是忘记调用一种方法来获取用户创建的所有帖子。

$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('AppBundle:User')->find($this->getUser()->getId());
dump($user->getPost()->getValues());exit;

getValues()是从PersistentCollection类中提取数据的方法。

PS:Symfony的文档需要一个巨大的改进。 :(

谢谢,

Parth vora