php - 通过原则查找连接表

标签 php mysql doctrine-orm

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

用户:

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();
}

}

用户帖子:

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;


}

我使用公共(public)变量是为了更容易调试。

现在,我正在尝试:

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

我得到了 user 对象,但是它返回了 user_post 对象:

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

并且不返回实际数据。它还返回一个巨大的数组。

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

最佳答案

您的 $posts 属性映射为 OneToMany,这意味着 用户 将拥有许多 user_post

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

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

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

关于php - 通过原则查找连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20568247/

相关文章:

PHP 简单 HTML DOM 解析器 : Select only DIVs with multiple classes

mysql - 如何使用内连接修复此 COUNT 查询数据

symfony - 如何指定用于 Doctrine 2.2/Symfony 2.2 和 PostgreSQL 的模式?

symfony - 如何在 Symfony 应用程序中为 Doctrine 配置 Redis 缓存

symfony - 使用 Sonata Admin 处理 Doctrine json_array 字段

php - Laravel 5.4 - 读取 xlsx 文件

php - 有没有办法测试 php 代码是否兼容 php < 5.3.2

php - 如何在 php 中对字符串数组进行排序? [这里的字符串是路径。例如/root/mandy/a.pdf, b.pdf & c.pdf

mysql - 整数值不正确 ERROR 1366

mysql按照规模聚合