Присвойте условие where переменной, чтобы ее можно было использовать в зависимости от условия - PullRequest
0 голосов
/ 03 июня 2019

У меня есть следующий код, который я хочу записать в стиле laravel.Пожалуйста, помогите мне с этим.

Я пишу так, но это не работает.

if (isset($request->search)) {
            $WHERE = ' WHERE project_name LIKE "%'.$request->search.'%" OR email LIKE "%'.$request->search.'%"';
        } else {
            $WHERE = NULL;
        }
        if(isset($request->offset) && isset($request->limit)){
            $sql = DB::select('SELECT id, project_name, email, phone, company, price FROM records "'.$WHERE.'" ORDER BY id LIMIT "'.$request->offset.'","'.$request->limit.'"');
        }else{
            $sql = DB::select('SELECT id, project_name, email, phone, company, price FROM records ORDER BY id');
        }

Ниже приведен фактический код php, который я хочу переписать способом Laravel.Пожалуйста, помогите мне с этим.

if (isset($_GET['search'])) {
            $WHERE = ' WHERE vehicle_id LIKE "%'.$_GET['search'].'%" ';
        } else {
            $WHERE = NULL;
        }

        if(isset($_GET['offset']) && isset($_GET['limit'])){
            $sql = "SELECT vehicle_id, deviceImei, locationAddress, ward_no FROM gps_locations ".$WHERE." ORDER BY sl_no LIMIT ".$_GET['offset'].",".$_GET['limit']."";
        }else{
            $sql = "SELECT vehicle_id, deviceImei, locationAddress, ward_no FROM gps_locations ORDER BY sl_no";
        }

        $result = $conn->query($sql);
        if ($result->num_rows > 0) {
            // output data of each row
            while($row = $result->fetch_assoc()) {
                $a_json_row["Vehicle_Id"] = $row["vehicle_id"];
                $a_json_row["DeviceImei"] = $row["deviceImei"];
                $a_json_row["LocationAddress"] = $row["locationAddress"];
                $a_json_row["WardNo"] = $row["ward_no"];
                array_push($temp, $a_json_row);
                //echo "id: " . $row["user_id"]. " - Name: " . $row["user_name"]. "<br>";
            }
        }
        //return print_r($temp);
        $sql2 = "SELECT count(*) as total FROM gps_locations ".$WHERE."";
        $result2 = $conn->query($sql2);
        $data = $result2->fetch_assoc();

1 Ответ

3 голосов
/ 03 июня 2019

В laravel вы можете легко сделать это с помощью Query Builder .. как для написанного вами php-кода.

PHP

if (isset($request->search)) {
    $WHERE = ' WHERE project_name LIKE "%'.$request->search.'%" OR email LIKE "%'.$request->search.'%"';
} else {
    $WHERE = NULL;
}
if(isset($request->offset) && isset($request->limit)){
    $sql = DB::select('SELECT id, project_name, email, phone, company, price FROM records "'.$WHERE.'" ORDER BY id LIMIT "'.$request->offset.'","'.$request->limit.'"');
}else{
    $sql = DB::select('SELECT id, project_name, email, phone, company, price FROM records ORDER BY id');
}

В Laravel

$qb = DB->table("records")->select("id", "project_name", "phone", "company", "price");

if (isset($request->search)) {
    $qb = $qb->where("project_name", "LIKE", "%".$request->search."%")
             ->orWhere("email", "LIKE", "%". $request->search."%");
}

 $result = $qb->orderBy("id", "ASC")->get(); // it would return laravel collection. so just dd() and see the structure.

//....
//....

foreach($result as $row){
    dd($row->id); // it will print the id.
}

Здесь вы можете найти руководство о том, как начать работу с построением запроса в laravel https://laravel.com/docs/5.8/queries#selects

ЕСЛИ вы хотите поделиться условиями для несколькихследуйте инструкциям построителя запросов.

$whereData = [];
$orWhereData = [];

if (isset($request->search)) {
    $whereData = [
            ["project_name", "LIKE", "%".$request->search."%"]
    ];

    $orWhereData = [
            ["email", "LIKE", "%".$request->search."%"]
    ];
}

 $result = DB->table("records")
                ->select("id", "project_name", "phone", "company", "price")
                ->where($whereData)
                ->orWhere($orWhereData)
                ->orderBy("id", "ASC")
                ->get(); // it would return laravel collection. so just dd() and see the structure.

//....
//....

foreach($result as $row){
    dd($row->id); // it will print the id.
}


// for the gps_locations.

$total = DB::table("gps_locations")
                ->where($whereData)
                ->orWhere($orWhereData)
                ->count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...