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.id
和 History.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;
}
我从我的 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.id
和 History.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;
}