“用户跟随”与PropelORM - 三种关系

时间:2015-05-19 01:05:02

标签: php mysql orm propel

有人能指出我正确的方向做一个“用户跟随”的事情。我有3个表:users,user_follows和posts。

如果我给用户对象加水,我可以得到他们关注的用户ID数组......并且post对象知道哪个用户发布了它...但是很难为给定用户所关注的用户获取帖子。

目前有这个,它返回所有人的帖子。

    $posts = PostsQuery::create()
        ->orderByDate('desc')
        ->limit('12')
        ->find();
    return $posts;

需要做filterByXXX()......

2 个答案:

答案 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)