Как добавить условный, где условный в запрос laravel Framework? - PullRequest
0 голосов
/ 20 января 2020

На самом деле сценарий - мои запросы выполняются на основе условия if. В первом сценарии

if ($a != "") {
    $getData = DB::table('students')->where([
        ['code', '=', '1'],
        ['class', '!=', 'General'],
        ['gender', '=', 'm']
    ]);
}

> //second scenario

if ($b != '') {
    $queryData = $getData->where(ST_Distancesphere(geom, ST_SetSRID(ST_MakePoint($longt, $latt), 4326)), '<', $b)->get();
} else {
    $queryData = $getData->get();
}
return $queryData;

в первом сценарии запрос работает нормально, но когда $ b не равно пустому, тогда где условие не работает

Ответы [ 2 ]

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

следовать официальной документации https://laravel.com/docs/5.8/queries#conditional -классы

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

Кажется, вы хотите использовать ST_Distancesphere метод, вам нужно использовать raw sql. Поэтому, если вы используете whereRaw(), как это, и устанавливаете привязку для , предотвращающую SQL Инъекцию :

$queryData=$getData->whereRaw("ST_Distancesphere(geom, ST_SetSRID(ST_MakePoint(:lng,:lat), 4326)) < :b", ["lng" => $longt, "lat" => $latt, "b" => $b])
                   ->get();

Однако, у вас есть другие способы привязки перед этим запросом,

DB::table('students')->where([['code', '=', '1'],['class', '!=', 'General'],['gender','=', 'm']])

Laravel получит Invalid parameter number ошибку.

Так что я думаю, что вам нужно изменить предыдущие привязки, заставить их всех использовать один и тот же способ привязки:

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

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