1

我正在尝试对 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 谢谢!

我尝试按照您所说的将其添加到我的实体中,但更改了名称,但我认为它根本没有意义,我的查询一次加载 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")
**/

私人 $following;

但是……这没有任何意义……

4

1 回答 1

1

您可以为用户类定义一个存储库,将注释添加到用户类。

@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;
于 2013-02-21T20:51:24.893 回答