我正在尝试使用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函数获取所有数据?
答案 0 :(得分:0)
您的$posts
属性已映射为OneToMany
,这意味着user
将多 user_post
。
因此,$posts
被充当user_post
个对象的集合,其中包含您期望的对象:
$user = $doctrine->em->find('user', 2);
foreach ($user->posts as $post) {
echo $post->content;
}