通过doctrine find连接表

时间:2013-12-13 13:55:07

标签: php mysql doctrine-orm

我正在尝试使用EntityManager来加载表中的所有字段及其关联,这是我的(测试)场景:我有实体用户和实体user_post,用户可以有几个user_post。 / p>

用户:

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class user
{

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="bigint")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
public $id;

/**
 * @ORM\OneToMany(targetEntity="user_post", mappedBy="id_user", cascade={"persist", "remove"}, orphanRemoval=TRUE, fetch="EAGER")
 */
public $posts;

/**
 * @var string $author
 *
 * @ORM\Column(name="author", type="string", length=100, nullable=false)
 */
public $author;

/**
 * @var text $content
 *
 * @ORM\Column(name="content", type="text", nullable=false)
 */
public $content;

/**
 * @var text $createdAt
 *
 * @ORM\Column(name="created_at", type="text", nullable=false)
 */
public $createdAt;

public function __construct() {
    $this->posts = new ArrayCollection();
}

}

user_post:

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class user_post
{

/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="bigint")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
public $id;

/**
 * @var integer $id_user
 *
 * @ORM\ManyToOne(targetEntity="user", inversedBy="posts")
 * @ORM\JoinColumn(name="id_user", referencedColumnName="id", nullable=FALSE)
 */
public $id_user;

/**
 * @var text $content
 *
 * @ORM\Column(name="content", type="text", nullable=false)
 */
public $content;


}

我正在使用公共变量来更容易调试。

现在,我正在尝试:

$user = $doctrine->em->find('user', 2);

我得到用户对象ok,但是它返回的是user_post对象:

Doctrine\ORM\PersistentCollection Object ( [snapshot:Doctrine\ORM\PersistentCollection:private] => Array ( [0] => user_post Object ( [id] => 1 [id_user] => user Object *RECURSION*

并且不返回实际数据。它也会返回一个巨大的阵列。

有没有办法用find函数获取所有数据?

1 个答案:

答案 0 :(得分:0)

您的$posts属性已映射为OneToMany,这意味着user user_post

因此,$posts被充当user_post个对象的集合,其中包含您期望的对象:

$user = $doctrine->em->find('user', 2);

foreach ($user->posts as $post) {
    echo $post->content;
}