口才的子查询在派生查询中被更改

时间:2019-05-29 03:59:21

标签: laravel eloquent

我有一个雄辩的查询,我将一些表连接在一起,然后对该查询应用不同的过滤器,但是经过一个过滤器后,原始子查询被其他过滤器中的第一个过滤器修改了。

这是原始查询:

        size_t len = strlen (line);
        if (len && len - 1 == '\n')
            line[--len] = 0;        /* trim \n from end of line */ 

然后应用不同的过滤器

$circle = DB::table('circles')
            ->joinSub($member, 'member', function ($join) {
                $join->on('circles.id', '=', 'member.circle_id');
            })->joinSub($place, 'place', function ($join) {
                $join->on('circles.place_id', '=', 'place.placeID');
            })->joinSub($dep, 'dep', function ($join) {
                $join->on('department_id', '=', 'depID');
            })->where('use_classification', UseClassificationEnum::USES)
            ->select('id', 'circle_name', 'circle_code', 'department_name', 'place_name', 'numMem', 'leader');

$current_circle = session('circle.id'); $circle_active = $circle->where('id', $current_circle)->first(); $circle_other = $circle->where('id', '<>', $current_circle)->get(); 查询中,$circle_other中包含了原始$circle,因此没有任何结果。

如果我按相反的顺序放置where('id', $current_circle)$circle_active,则后者将不会产生任何结果。

我不想重复查询只是为了应用不同的过滤器。 我哪里做错了?请帮忙。

1 个答案:

答案 0 :(得分:0)

基于我对Github的Laravel Query Builder来源的理解。

where()在您的$circle查询的$circle_active实例中建立查询,因此反映在$circle_other中。

在这种情况下,您可以做的就是创建一个这样的助手。

public static function buildCircleQuery() {
   return DB::table('circles')
            ->joinSub($member, 'member', function ($join) {
                $join->on('circles.id', '=', 'member.circle_id');
            })->joinSub($place, 'place', function ($join) {
                $join->on('circles.place_id', '=', 'place.placeID');
            })->joinSub($dep, 'dep', function ($join) {
                $join->on('department_id', '=', 'depID');
            })->where('use_classification', UseClassificationEnum::USES)
            ->select('id', 'circle_name', 'circle_code', 'department_name', 
    'place_name', 'numMem', 'leader');
}

那你就可以做到

// Note that Helper:: is based on your helper class name
$circle_active = Helper::buildCircleQuery()->where('id', $current_circle)->first();
$circle_other = Helper::buildCircleQuery()->where('id', '<>', $current_circle)->get();