Laravel Eloquent - Невозможно получить столбцы с помощью массива - PullRequest
0 голосов
/ 05 августа 2020

Я использую 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 ]

1 голос
/ 05 августа 2020

Я думаю, вы допустили ошибку в запросе. Замените следующие строки этими:

if($Caller_number!=null){
    $querypart[] = "caller_number = '$Caller_number'";
}
if($Callee_number!=null){
    $querypart[] = "callee_number = '$Callee_number'";
}

(обратите внимание на одинарные кавычки в $Caller_number и $Callee_number).

Также, используя метод whereRaw() вместо where() как предлагается в ответном комментарии.

0 голосов
/ 05 августа 2020

Я добавляю ответ, предлагающий метод упрощения вашего кода путем исключения всех условий if с использованием методов сбора Laravel.

$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 вы иметь в исходном запросе допустимую функцию построителя запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...