我有以下代码
public function findAccessible(Query $query, array $options){
return $this->findPublic($query, $options)
->union($this->findMyAdmin($query, $options));
}
public function findPublic(Query $query, array $options){
return $query
->where(['public' => true]);
}
public function findMyAdmin(Query $query, array $options){
return $query
->where(['admin_user_id' => $options['User.id']]);
}
findAccessible调用在Chrome中为我提供了此错误消息:ERR_EMPTY_RESPONSE 没有其他错误消息,错误日志中没有条目。我确信这是因为联盟电话。怎么做?
我想要实现的目标: groups hasAndBelongsTo用户 groups:id,name,admin_user_id,public
我想获得群组
1)什么是公共组(这是好的,findPublic方法)
2)其中admin_user是给定用户(这是好的,findMyAdmin方法)
3)在给定用户所在的位置(这没关系,我可以使用其他find() - >匹配调用)
4)用户可以访问,例如。公共或给定用户是管理员或成员 - 意味着1),2)和3)的联合 - 这就是我正在努力的事情。如果我将所有这些放在一个find方法中,我就无法为成员资格定义OR关系,因为这是通过匹配翻译成内部联接的内容来完成的。
答案 0 :(得分:0)
我找到了一个非常丑陋却又有效的解决方案。
public function findAccessible(Query $query, array $options){
$qq = $this->query($query);
$memberships = $qq->matching('Users', function($q) use ($options){
return $q->where(['Users.id' => $options['User.id']]);
});
foreach($memberships as $m){
$memberInGroup[] = $m->id;
}
return $query
->where(['public' => true])
->orWhere(['admin_user_id' => $options['User.id']])
->orWhere(['Groups.id IN' => $memberInGroup]);
}
我希望有人会找到更好的解决方案并在此发布。