Php SQLSTATE[42S22]:未找到列:1054未知列';索赔要求';在';具有第'条;
我在使用laravel eloquent时遇到了一个奇怪的问题,我找不到解决的方法。 我在运行拉威尔5.6 我得到的错误是Php SQLSTATE[42S22]:未找到列:1054未知列';索赔要求';在';具有第'条;,php,laravel,eloquent,Php,Laravel,Eloquent,我在使用laravel eloquent时遇到了一个奇怪的问题,我找不到解决的方法。 我在运行拉威尔5.6 我得到的错误是 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'claimtrc' in 'having clause' (SQL: select count(*) as aggregate from `claims` where `claims`.`id` not in (select `claim_id` from `cl
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'claimtrc' in 'having clause' (SQL: select count(*) as aggregate from `claims` where `claims`.`id` not in (select `claim_id` from `claim_tracking` where `claim_tracking`.`claim_id` = claims.id or `claim_tracking`.`type` = Finished or `claim_tracking`.`type` = Brake) group by `claims`.`id` having `claimtrc` >= 1)
我正在运行的代码是:
$claimsPostponed = Claim::select(DB::raw('*, (SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) as claimtrc'))
->wherenotin('claims.id', function ($query) {
$query->select('claim_id')
->from('claim_tracking')
->where('claim_tracking.claim_id', '=', 'claims.id')
->orwhere('claim_tracking.type', 'Finished')
->orwhere('claim_tracking.type', 'Brake');
})
->groupBy('claims.id')
->having('claimtrc', '>=', 1)->count();
它可以像这样工作,我可以得到计数:
$claimsPostponed = Claim::select(DB::raw('*, (SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) as claimtrc'))
->wherenotin('claims.id', function ($query) {
$query->select('claim_id')
->from('claim_tracking')
->where('claim_tracking.claim_id', '=', 'claims.id')
->orwhere('claim_tracking.type', 'Finished')
->orwhere('claim_tracking.type', 'Brake');
})
->groupBy('claims.id')
->having('claimtrc', '>=', 1)->get();
$claimsPostponed = count($claimsPostponed);
但是我不认为这种方法是有效的,因为它将所有结果加载到一个数组中,然后对数组进行计数。为什么不试试WhereRaw而不是Select 大概是这样的:
$claimsPostponed = Claim::wherenotin('claims.id', function ($query) {
$query->select('claim_id')
->from('claim_tracking')
->where('claim_tracking.claim_id', '=', 'claims.id')
->orwhere('claim_tracking.type', 'Finished')
->orwhere('claim_tracking.type', 'Brake');
})
->WhereRaw("(SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) >= 1")
->groupBy('claims.id')
->count();
$claimsPostponed = Claim::select('*')
->whereHas('claim_tracking',function($q){
$q->whereIn('type', ['Finished', 'Brake']);
})
->WhereRaw("(SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) >= 1")
->groupBy('claims.id')
->count();
你可以试试这样的,如果对你有用的话,请告诉我
还请记住,您不需要选择,因为Count无论如何只执行“selectcount(*)”
另一种方法可能是使用连接,WhereHas甚至更好
Asuming claim_tracking是一种关系,应该是这样的:
$claimsPostponed = Claim::wherenotin('claims.id', function ($query) {
$query->select('claim_id')
->from('claim_tracking')
->where('claim_tracking.claim_id', '=', 'claims.id')
->orwhere('claim_tracking.type', 'Finished')
->orwhere('claim_tracking.type', 'Brake');
})
->WhereRaw("(SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) >= 1")
->groupBy('claims.id')
->count();
$claimsPostponed = Claim::select('*')
->whereHas('claim_tracking',function($q){
$q->whereIn('type', ['Finished', 'Brake']);
})
->WhereRaw("(SELECT count(*) FROM claim_tracking WHERE claim_tracking.claim_id=claims.id) >= 1")
->groupBy('claims.id')
->count();
我想这可能是工作
$claimsPostponed = Claim::select(DB::raw('*, (SELECT count(*) as claimtrc FROM
claim_tracking WHERE claim_tracking.claim_id=claims.id)'))
->wherenotin('claims.id', function ($query) {
$query->select('claim_id')
->from('claim_tracking')
->where('claim_tracking.claim_id', '=', 'claims.id')
->orwhere('claim_tracking.type', 'Finished')
->orwhere('claim_tracking.type', 'Brake');
})
->groupBy('claims.id')
->having('claimtrc', '>=', 1)->count();