我正在尝试在symfony2上进行第一次查询,所以问题可能是愚蠢的。
我的桌子上有用户和表格(朋友)请求。在请求表中我存储
id,nick(id),odobera(我跟随的另一个用户ID),时间
并且nick属性看起来:
/**
* @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User", inversedBy="Requests")
* @ORM\JoinColumn(name="nick", referencedColumnName="id")
*/
现在我想重建我的旧函数查询到新的symfony:
$select_all=mysql_query("SELECT re.*,tb.rank,tb.profile_picture_ultra_small,tb.country,tb.typ_hraca,tb.rank
FROM requests as re
INNER JOIN tb_users as tb
ON re.nick=tb.nick
WHERE re.odobera='$nick' AND re.nick<>'$nick' ORDER BY re.id DESC LIMIT 50");
我开始只是简单地说:
public function getMyFollowers($my_id)
{
$qb = $this->createQueryBuilder('mf')
->select('mf')
->where('mf.odobera = :my_id')
->addOrderBy('mf.time','DESC')
->setParameter('my_id', $my_id)
->setMaxResults(50);
return $qb->getQuery()
->getResult();
}
我没有内部联接来选择跟随我的用户的profile_picture +我的结果看起来很奇怪当我现在转储它:(因为你可以看到没有跟随我的用户的ID(昵称))
"Proxies\__CG__\TB\UserBundle\Entity\User" ["odobera"]=> int(25) ["time"]=> int(1359128544) ["viewed"]=> bool(true) } [6]=> object(stdClass)#624 (6) { ["__CLASS__"]=> string(33) "TB\RequestsBundle\Entity\Requests" ["id"]=> int(57443) ["nick"]=> string(40) "Proxies\__CG__\TB\UserBundle\Entity\User" ["odobera"]=> int(25) ["time"]=> int(1359124714) ["viewed"]=> bool(true) } [7]=> object(stdClass)#625 (6) { ["__CLASS__"]=> string(33) "TB\RequestsBundle\Entity\Requests" ["id"]=> int(57013) ["nick"]=> string(40) "Proxies\__CG__\TB\UserBundle\Entity\User" ["odobera"]=> int(25) ["time"]=> int(1359047459) ["viewed"]=> bool(true) } [8]=> object(stdClass)#626 (6) { ["__CLASS__"]=> string(33) "TB\RequestsBundle\Entity\Requests" ["id"]=> int(56766) ["nick"]=> string(40)
有什么想法吗? :P Thx!
我尝试将此添加到我的实体,如你所说,但改变了名称,但我认为它根本没有看到我的查询一次加载9s并撤回只有一个用户+我现在无法加载页面。 .. 用户:
/**
* @ORM\OneToMany(targetEntity="TB\RequestsBundle\Entity\Requests", mappedBy="following")
*
**/
private $followers;
请求:
/**
* @ORM\ManyToOne(targetEntity="TB\UserBundle\Entity\User", inversedBy="followers")
* @ORM\JoinColumn(name="nick", referencedColumnName="id")
**/
私人$跟随;
但是......它没有成功......
答案 0 :(得分:1)
您可以为用户类定义存储库,将注释添加到User类。
@ORM\Entity(repositoryClass="Acme\YourBundle\Entity\UserRepository")
在存储库中,您将拥有:
public function getFollowers($id)
{
$qb = $this->getEntityManager()->createQueryBuilder();
$qb
->select('user')
->from('YourBundle:User', 'user')
->leftJoin('user.requests', 'friends')
->where('friends.odobera = :id')
->setParameter('id', $id)
->orderBy('friends.time', 'DESC')
->setMaxResults(50);
return $qb->getQuery()->getResult();
}
在您的控制器上
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('YourBundle:User')->getFollowers($id);
映射信息示例
在用户
上/**
* @ORM\OneToMany(targetEntity="Followers", mappedBy="following")
*
**/
private $followers;
追随者(表格是您定义的追随者)
/**
* @ORM\ManyToOne(targetEntity="Users", inversedBy="followers")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id")
**/
private $following;