Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLSTATE[42S22]:未找到列:1054未知列';索赔要求';在';具有第'条;_Php_Laravel_Eloquent - Fatal编程技术网

Php SQLSTATE[42S22]:未找到列:1054未知列';索赔要求';在';具有第'条;

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

我在使用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 `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();