如何通过 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 功能可以提供任何帮助?
好的,感谢您提供图表和补充说明。
因此,您想查询与用户最喜欢的活动关联的用户。这是一种可能的解决方案(在此处的空数据库上测试):
$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;
}
我有一个名为 "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 功能可以提供任何帮助?
好的,感谢您提供图表和补充说明。 因此,您想查询与用户最喜欢的活动关联的用户。这是一种可能的解决方案(在此处的空数据库上测试):
$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;
}