大家好,我试图计算表中的所有记录,但前提是该表不包含特定列(deleted_at)中的数据。它是一个联接表,表名是公司和雇员。我目前正在使用DB :: raw来计数记录,但是只有在delete_at列为null时,它才应该对其进行计数。请了解我是一个初学者。
public function index()
{
$user = Auth::user()->id;
$companies = DB::table('companies AS c')
->select([
'c.id',
'c.logo',
'c.company_name',
'c.created_at',
'c.sector',
'c.deleted_at',
DB::raw('COUNT(e.id) AS employee_count')
])
->leftJoin('employees AS e', 'e.company_id', '=', 'c.id' )
->leftJoin('company_user AS cu', 'cu.company_id', '=', 'c.id')
->where('cu.user_id', '=', $user)
->where('c.deleted_at', '=', null)
->groupBy('c.id')
->get();
return view('account.companies.index')
->with('companies', $companies);
}
答案 0 :(得分:3)
如果您使用的是Mysql,则可以使用条件聚合
$companies = DB::table('companies AS c')
->select([
'c.id',
'c.logo',
'c.company_name',
'c.created_at',
'c.sector',
'c.deleted_at',
DB::raw('SUM(c.deleted_at IS NULL) AS employee_count')
])
->leftJoin('employees AS e', 'e.company_id', '=', 'c.id' )
->leftJoin('company_user AS cu', 'cu.company_id', '=', 'c.id')
->where('cu.user_id', '=', $user)
->groupBy('c.id')
->get();
在mysql中,当在sum(a = b)内使用表达式时,结果将为布尔值0/1,因此您可以使用上面的条件计数
或者您可以在查询中使用whereNull()
方法
->whereNull('c.deleted_at')