【问题标题】:Doctrine: Get followed users' posts原则:获取关注用户的帖子
【发布时间】:2015-10-11 11:25:17
【问题描述】:

如何检索用户关注的用户的所有帖子,类似于社交媒体上的主页。

在 SQL 中很简单,但是在 DQL 中这是什么样的呢?

select * from post
join friends on friend_user_id = post.from_id
where user_id = :uid

我尝试了很多类似的方法,但都无法奏效:

$this->getEntityManager()
    ->createQuery(
        'SELECT p
            FROM MyBundle:Post p
            JOIN MyBundle:User u WITH p.from IN u.myFriends
            WHERE u.id = :uid'
    )

我的用户实体looks like in the documentation

<?php
/** @Entity **/
class User
{
    // ...

    /**
     * @ManyToMany(targetEntity="User", mappedBy="myFriends")
     **/
    private $friendsWithMe;

    /**
     * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
     * @JoinTable(name="friends",
     *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")}
     *      )
     **/
    private $myFriends;

    public function __construct() {
        $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
        $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
    }

    // ...
}

这里是我的 Post 实体:

<?php
/** @Entity **/
class Post
{
    // ...

    /**
     * @ManyToOne(targetEntity="User")
     **/
    private $from;

    // ...
}

【问题讨论】:

    标签: doctrine-orm doctrine many-to-many dql


    【解决方案1】:

    一个简单的工作 DQL 方法如下:

    $dql   = "SELECT p FROM MyBundle:Post p
                       WHERE p.from in 
                        (SELECT u FROM MyBundle:User u JOIN u.friendsWithMe f where f = :user )";
    
    $query = $em->createQuery($dql);
    $query->setParameter(':user', $this->getUser());
    

    希望有帮助

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2015-11-08
      • 2020-03-22
      • 1970-01-01
      • 2015-04-23
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      相关资源
      最近更新 更多