Как обработать два условия whereRaw с псевдонимами столбцов в Laravel framework? - PullRequest
0 голосов
/ 22 января 2020

Я использую запросы ниже

if($a != "") {
    $getData = DB::table('students')
    ->whereRaw("code = :code AND class != :class AND gender = :gender", ["code" => 1, "class" => "General", "gender" => "m"])->get(['code as c', 'class as c','students.*']);
}

if($b != '') {
    $queryData=$getData->whereRaw(" ST_Distancesphere(geom,ST_SetSRID(ST_MakePoint(:longt, :latt), 4326)) < :b", ["longt" => $longt, "latt" => $latt, "b" => $b])->get();
} 

return $queryData;

, когда $ a! = '' Это условие верно, в этом случае запрос выполняется отлично, но когда второй случай - $ b! = '' в этом случае выдайте мне ошибку. Метод Illuminate \ Support \ Collection :: whereRaw не существует.

1 Ответ

0 голосов
/ 22 января 2020

Вы используете построитель запросов, и вы использовали ->get() в первом условии, это вернет результат сбора. У него нет whereRaw метода.

Вам нужно использовать select() вместо get()

if($a != "") {
    $queryData = DB::table('students')
               ->whereRaw("code = :code AND class != :class AND gender = :gender", ["code" => 1, "class" => "General", "gender" => "m"])
               ->select(['code as c', 'class as c','students.*']);
}

if($b != '') {
    $queryData = $queryData->whereRaw(" ST_Distancesphere(geom,ST_SetSRID(ST_MakePoint(:longt, :latt), 4326)) < :b", ["longt" => $longt, "latt" => $latt, "b" => $b]);
} 
return $queryData->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...