Doctrine/dflydev - OneToMany 关联 ID

Doctrine/dflydev - OneToMany associated ID

我从我的 UserRepository:

得到了这个错误

[Semantical Error] line 0, col 51 near 'h': Error: Class DokMngr\Entity\User has no association named id

我了解错误来自我的用户实体中缺少声明。当字段既是生成的 ID 又是 OneToMany 关联时,我找不到正确的语法。

希望有人能帮我解决我的问题,或者至少解释一下为什么我不能使用 id 作为关联。

class UserRepository extends EntityRepository 
{
    public function findAllwithHistoryCount() {
        $qb = $this->createQueryBuilder('u')
            ->leftJoin('u.id', 'h');
        return $qb->getQuery()->getResult();
    }
}

/**
 * @Entity(repositoryClass="DokMngr\Repository\UserRepository")
 * @Table(name="users")
 */
class User implements UserInterface
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;
}

/**
 * @Entity(repositoryClass="DokMngr\Repository\HistoryRepository")
 * @Table(name="history")
 */
class History
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="id")
     * @JoinColumn(name="user", referencedColumnName="id")
     */
    protected $user;
}

多亏了 Olibiaz,我发现了推理中的错误。 我一直认为我必须像在数据库内部一样在 User.idHistory.user 之间创建关联。 但是我必须在 User 实体中创建一个新字段 histories。 (数据库中完全不存在)

下面是更正后的实体:

用户

use Doctrine\Common\Collections\ArrayCollection;

/**
 * @Entity(repositoryClass="DokMngr\Repository\UserRepository")
 * @Table(name="users")
 */
class User implements UserInterface
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @OneToMany(targetEntity="History", mappedBy="user")
     */
    private $histories;
}

历史

/**
 * @Entity(repositoryClass="DokMngr\Repository\HistoryRepository")
 * @Table(name="history")
 */
class History
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @ManyToOne(targetEntity="User", inversedBy="histories")
     * @JoinColumn(name="user", referencedColumnName="id")
     */
    protected $user;
}