在下面的查询中,我使用addSelect
函数添加了三个新列
DB::connection('mysql_slave')
->table('applications')
->whereNull('applications.deleted_at')
->when($column != 'contract_return_date' && $column != 'contract_delivery_date',function ($query) use ($column,$date_from,$date_to){
return $query->whereBetween('applications.'.$column, [$date_from, $date_to]);
})
->join('customers','applications.customer_id','=','customers.id')
->join('departments','applications.department_id','=','departments.id')
->select([
'applications.id',
'applications.customer_id',
DB::raw('CONCAT(IFNULL(customers.last_name,"")," ",customers.first_name ) as customers_name'),
DB::raw('CONCAT(IFNULL(applications.last_name,"")," ",applications.first_name ) as contract_name'),
'applications.offer_type as offer_type',
'applications.status_id',
'applications.contract_no',
'applications.current_provider',
'applications.extra_offer',
'applications.offer_warranty',
'applications.department_id',
'customers.mobile_phone as customer_mobile',
'applications.program as program',
'applications.saled_by_text as saler',
'departments.name as department',
'applications.created_at as created_at',
'applications.created_at as saled_at',
DB::raw('IF(applications.sale=1,"NAI","OXI") as sale'),
])
->addSelect(['submission_date'=> StatusLog::select('created_at')
->whereColumn('application_id','applications.id')
->where('status','=',1)
->latest()
->take(1)
])
->addSelect(['resubmission_date'=> StatusLog::select('created_at')
->whereColumn('application_id','applications.id')
->where('status','=',2)
->latest()
->take(1)
])
->addSelect(['error_date' => StatusLog::select('created_at')
->whereColumn('application_id','applications.id')
->whereIn('status', [5, 6])
->latest()
->take(1)
]) ->when($column == 'contract_delivery_date',function ($query) use ($date_from,$date_to){
return $query->whereBetween('submission_date', [$date_from, $date_to]);
});
上面的查询用于打印数据表上的数据。
查询包括使用addSelect函数添加的列,并且这些列在表中正确显示。
但是,当我尝试查询submission_date字段时,遇到了一个错误:
1054 Unknown Column submission_date.
是否有办法查询使用Laravel中的addSelect函数创建的列?
谢谢你的帮助,我为我的英语错误道歉。
2条答案
按热度按时间s6fujrry1#
我认为你不能这样做。自定义选择字段(submission_date)是在主查询结果之后计算的。这是数据库的一个限制。
但是您可以使用
HAVING
运算符来代替。https://stackoverflow.com/a/67580272/6901915
pkmbmrz72#
使用
addSelect
并不创建字段,只是在查询中添加了字段,所以无法进行查询,我们来看一个例子:是我创建的一个用于概念验证的
table
。现在,让我们填写一些数据:现在,让我们查询它,向它添加一个名为
foo
的字段:现在,我们按照
foo
进行过滤:我们得到一个错误,如下所示:
因此,如果您想添加一个字段并通过它进行查询,那么您需要将该字段的等价项硬编码到条件中,或者在该字段所在的表中创建一个
view
,或者将该字段添加到表中。