我有一个名为" 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 如何解决此问题?
可能会使我的立场变得清晰。
答案 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功能可以有任何帮助吗?