如何通过 redbeanphp 查询相同 table 中的 many-to-many 关系?

how to query many-to-many relationship in same table by redbeanphp?

我有一个名为 "user" 的 table,这个 table 与其自身有多对多关系,例如最喜欢的动作。这意味着一个用户可以收藏多个用户,并且可以被多个用户收藏。

现在我想查询这个关系并让每个用户都喜欢一个空间用户。

我使用这个代码:

$users = $agent->via($TB_Favorite,"agent_id=? and favorite.action=?", array($userId,FAVORITE_TYPE_USER_FAVORITE))->sharedUsers ;

我通过分析数据库调试此代码并得到此结果:

        SELECT
            `users`.*  ,
            COALESCE(
            NULLIF(`favorite`.`users_id`, `users`.id),
            NULLIF(`favorite`.`users2_id`, `users`.id)) AS linked_by
        FROM `favorite`
        INNER JOIN `users` ON
        ( `users`.id = `favorite`.`users2_id` AND `favorite`.`users_id` IN ('13') ) OR
        ( `users`.id = `favorite`.`users_id` AND `favorite`.`users2_id` IN ('13') )

但在这种情况下它必须使用 favorite.agent_id 而不是 favorite.users2_id 我该如何解决这个问题问题 ?

这是我的 table 图:

也许这让我的立场更加明确。

我不太明白你的意思,但也许 aggr 功能可以提供任何帮助?

http://www.redbeanphp.com/other_relations#aggr

好的,感谢您提供图表和补充说明。 因此,您想查询与用户最喜欢的活动关联的用户。这是一种可能的解决方案(在此处的空数据库上测试):

$x = R::dispense(array(
'_type' => 'user',
'name' => 'Q',
'ownActivity' => array(
    array('_type'=>'favorite', 
         'name'=>'A', 
         'agent'=> array(
              '_type'=>'user', 
              'name'=>'X')),
    array('_type'=>'favorite', 
          'name'=>'B', 
          'agent'=> array(
              '_type'=>'user', 
              'name'=>'Y')),)));
R::store($x);
$me = R::findOne('user', ' `name` = ? ', array('Q'));
$favoriteActivities = $me->ownFavoriteList;
foreach($favoriteActivities as $activity) {
    $agent = $activity->fetchAs('user')->agent;
    $favoriteUsers[$agent->id] = $agent;
    echo $agent->name;
}