0

我已经阅读了文档,但我不太清楚如何在 Laravel 4 中运行以下查询

SELECT
    COUNT(*)
FROM
    acl a,
    routes r
WHERE
    (a.user_id = 1 OR
     a.group_id IN(SELECT group_id FROM user_group_junction WHERE user_id = 1)) AND
     r.route = 'protected' AND
     a.routes_id = r.id;

那么如何使用 eloquent 在 Laravel 4 中运行查询呢?

是的,每个表都有一个模型,并且定义了关系

根据我选择的答案,以下是我想出的(并且有效)

Acls::join('routes','routes.id','=','acl.routes_id')
                ->where('routes.route','=','protected')
                ->Where(function($in_parenthesis) use($user_id){
                    $in_parenthesis->whereIn('acl.group_id',function($where_in) use($user_id){
                            $where_in->select('group_id')
                                ->from('user_group_junction')
                                ->where('user_id','=',$user_id);
                            })
                    ->orWhere('acl.user_id','=',$user_id);
                })
                ->count();
4

1 回答 1

0

在 Eloquent 模型上调用的方法会传递给Illuminate\Database\Eloquent\Builder类,该类本身是从Illuminate\Database\Query\Builder类扩展而来的。这意味着你可以用查询构建器做的所有事情,你也可以用 Eloquent 模型做。例外是您不需要定义表。

因此,例如,如果您想像上面那样执行连接和位置,您只需执行以下操作:

$query = Acl::join('routes', 'acl.routes_id', '=', 'routes.id')
             ->where('routes.route', '=', 'protected');

$results = $query->get();

显然这不是您的全部查询,但您可以找出其余的。

于 2013-08-17T02:00:54.470 回答