使用union的模型空响应

时间:2014-11-25 12:24:53

标签: cakephp-3.0

我有以下代码

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关系,因为这是通过匹配翻译成内部联接的内容来完成的。

1 个答案:

答案 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]);
}

我希望有人会找到更好的解决方案并在此发布。