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();