Doctrine / dflydev - OneToMany关联ID

时间:2016-12-12 16:59:02

标签: php doctrine silex

我从UserRepository

收到此错误
  

[语义错误]第0行,第51页'h'附近:错误:类DokMngr \ Entity \ User没有名为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;
}

1 个答案:

答案 0 :(得分:0)

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

所以这里是经过纠正的实体:

用户

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