gpt4 book ai didi

mysql - Laravel 在带有连接的查询生成器上使用 where 进行计数

转载 作者:行者123 更新时间:2023-11-29 01:49:29 25 4
gpt4 key购买 nike

大家好,我正在尝试计算表中的所有记录,但前提是该表不包含特定列 (deleted_at) 中的数据。这是一个连接表,表名是公司和员工。我目前正在使用 DB::raw 计算记录,但它应该只在 deleted_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);
}

最佳答案

如果你正在使用 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) 中使用表达式时,它的结果将是 bool 值 0/1,因此您可以使用上面的方法获取条件计数

或者您可以在查询中使用 whereNull() 方法

->whereNull('c.deleted_at')

关于mysql - Laravel 在带有连接的查询生成器上使用 where 进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50953073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com