亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel Eloquent - 無法使用數組獲取列

Laravel Eloquent - 無法使用數組獲取列

PHP
楊__羊羊 2023-09-15 17:19:48
我正在使用 laravel eloquent 從多個列中獲取數據。我正在使用數組從多個列中獲取數據。為簡單起見,我顯示了兩列的數據。這是我的數據庫表,其中包含callee_number和caller_number:這是我使用數組來獲取列的代碼:    $paramArray = $params->all();    $Caller_number = "";    $Callee_number = "";    if (isset($paramArray['Caller_number']) && $paramArray['Caller_number'] != '') {        $Caller_number = $params->input('Caller_number');    }    if (isset($paramArray['Callee_number']) && $paramArray['Callee_number'] != '') {        $Callee_number = $params->input('Callee_number');    }    if($Caller_number!=null){        $querypart[] = "caller_number=$Caller_number";    }    if($Callee_number!=null){        $querypart[] = "callee_number=$Callee_number";    }    $FinalQueryPart = '';    if (!empty($querypart)) {                $Seprator = "";        foreach ($querypart as $querypartValue) {            $FinalQueryPart .= $Seprator . $querypartValue;            $Seprator = " AND ";        }    }    $FinalQueryPart = trim($FinalQueryPart); //Output: "caller_number=783 AND callee_number=77"    但是,在上面的代碼之后運行以下代碼后,我收到錯誤:    $gets = Tbcdrnew::where(function ($query) use ($FinalQueryPart) {        $query->MIN('uniqueid')->where($FinalQueryPart)            ->from('cdrnew');                })->groupBy('uniqueid')->orderBy('Start_Date','DESC')->get();錯誤如下:Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'caller_number=783 AND callee_number=77' in 'where clause' (SQL: select * from `cdrnew` where (`caller_number=783 AND callee_number=77` is null) group by `uniqueid`不明白我的代碼中有什么問題。有人可以糾正我嗎?
查看完整描述

2 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

我認為您在查詢中犯了一個錯誤。將以下行替換為這些行:


if($Caller_number!=null){

    $querypart[] = "caller_number = '$Caller_number'";

}

if($Callee_number!=null){

    $querypart[] = "callee_number = '$Callee_number'";

}

$Caller_number(請注意&上的單引號$Callee_number)。


另外,使用該whereRaw()方法而不是where()按照響應評論中建議的方法。


查看完整回答
反對 回復 2023-09-15
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

我添加了一個答案,建議一種通過使用 Laravel 集合方法消除所有條件來簡化代碼的方法if。


$query = Tbcdrnew::query();                           //start a query string based on Tbcdrnew model OR you could do DB::table('cdrnew');

collect($paramArray)->filter(function($value, $key){  //convert paramArray into a collection

    return $value != '';                              //filter all null and empty values

})->each(function($value, $key) use ($query){         //iterate through all filtered values

    $query->where(strtolower($key), $value);          //assuming array key is always column key in lowercase

});

$result = $query->groupBy('uniqueid')->orderBy('start_date','desc')->get();

我不確定$query->MIN您的原始查詢中是否有有效的查詢生成器函數。


查看完整回答
反對 回復 2023-09-15
  • 2 回答
  • 0 關注
  • 152 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號