如何通过redbeanphp查询同一个表中的多对多关系?

时间:2015-08-23 11:26:13

标签: php mysql redbean

我有一个名为" user"并且这个表有很多关系,例如喜欢的动作。这意味着用户可以收藏多个用户,并且可以被多个用户收藏。

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

我使用此代码:

$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 如何解决此问题?

这是我的表格图: enter image description here

可能会使我的立场变得清晰。

2 个答案:

答案 0 :(得分:2)

好的,感谢图表和其他说明。 因此,您希望查询与用户最喜欢的活动相关联的用户。这是一个可能的解决方案(在空数据库上测试):

$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;
}

答案 1 :(得分:0)

我不确切地知道你的意思,但也许aggr功能可以有任何帮助吗?

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