Laravel雄辩的“have”和计算列

Laravel雄辩的“have”和计算列,laravel,eloquent,Laravel,Eloquent,我的控制器中有以下逻辑,它在having语句中失败。如果没有$type步骤,数据将按预期显示(因此addSelect按预期工作)。如何使用计算列meters\u count过滤have 错误: SQLSTATE[42703]: Undefined column: 7 ERROR: column "meters_count" does not exist 守则: // Get all customers visible to this user $query = Site::

我的控制器中有以下逻辑,它在
having
语句中失败。如果没有
$type
步骤,数据将按预期显示(因此
addSelect
按预期工作)。如何使用计算列
meters\u count
过滤
have

错误:

SQLSTATE[42703]: Undefined column: 7 ERROR: column "meters_count" does not exist
守则:

// Get all customers visible to this user
$query = Site::with('customer.logo', 'mainContact', 'address')
    ->addSelect(['meters_count' => Meter::selectRaw('COUNT(*)')->whereColumn('meters.site_id', 'sites.id')]);

// Filter for user type
switch ($type) {

    case 'deleted':
        $query->onlyTrashed();
        break;

    case 'no_meters':
        $query->groupBy('sites.id')
           ->having('meters_count', '=', 0);
        break;

    default:
        $query->groupBy('sites.id')
           ->having('meters_count', '>', 0);
}

// Run query here...
$sites = $query-get();

在应用之前,需要应用GroupBy函数

$users = DB::table('users')
                ->groupBy('account_id')
                ->having('account_id', '>', 100)
                ->get();
我是这样做的:

// Get all customers visible to this user
$query = Site::with('customer.logo', 'mainContact', 'address')
    ->withCount('meters');

// Filter for user type
switch ($type) {

   case 'deleted':
        $query->onlyTrashed();
        break;

   case 'no_meters':
        $query->groupBy('sites.id')
            ->havingRaw('(SELECT COUNT(*) FROM meters WHERE meters.site_id = sites.id) = ?', [0]);
        break;

   default:
        $query->groupBy('sites.id')
            ->havingRaw('(SELECT COUNT(*) FROM meters WHERE meters.site_id = sites.id) > ?', [0]);
    }

}

// Run query here...
$sites = $query->get();