我从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;
}
答案 0 :(得分:0)
感谢Olibiaz,我在推理中发现了错误。
我一直认为我必须在数据库内部创建User.id
和History.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;
}