有人能指出我正确的方向做一个“用户跟随”的事情。我有3个表:users,user_follows和posts。
如果我给用户对象加水,我可以得到他们关注的用户ID数组......并且post对象知道哪个用户发布了它...但是很难为给定用户所关注的用户获取帖子。
目前有这个,它返回所有人的帖子。
$posts = PostsQuery::create()
->orderByDate('desc')
->limit('12')
->find();
return $posts;
需要做filterByXXX()......
答案 0 :(得分:1)
Propel ORM不支持同一个表的实体之间的多对多关系。但是您可以使用EqualNestBehavior来使其正常运行。
有了这个,您的代码可能如下所示:
$user = UsersQuery::create()->findPk($userId);
$follows = $user->getFollows();
$posts = PostsQuery::create()
->filterByUser($follows)
->orderByDate('desc')
->limit('12')
->find();
以下是架构的相关部分:
<table name="follow">
<behavior name="equal_nest">
<parameter name="parent_table" value="users" />
</behavior>
<!-- you do not need to specify any colums for the "follow" table, the behavior will add them automatically -->
</table>
答案 1 :(得分:1)
使用use*Query
即可轻松完成此操作。
$posts = PostsQuery::create()
->useUserFollowsQuery()
->filterByUserId([12,34,55])
->endUse()
->orderByDate('desc')
->limit('12')
->groupById() //important if you join a one-to-many relation
->find();
return $posts;
优化查询是使用addJoinCondition:
->innerJoinUserFollows()
->addJoinCondition('UserFollows', 'UserFollows.user_id = ?',[123,34], Criteria::IN)