Преобразование sql запроса в laravel красноречивый запрос - PullRequest
0 голосов
/ 30 марта 2020

я пытаюсь преобразовать следующие основные функции php в laravel, я пробовал его, и он не работает

Вот мой код

 public function gmap()
   {
            // Get parameters from URL
    $center_lat = $_GET["lat"];
    $center_lng = $_GET["lng"];
    $radius = $_GET["radius"];
    // Start XML file, create parent node
    $dom = new \DOMDocument("1.0");
    $node = $dom->createElement("markers");
    $parnode = $dom->appendChild($node);

    // Search the rows in the markers table
    $query = ('SELECT id,locationName,locationAddress1,locationLat,locationLong, ( 3959 * acos( cos( radians('$center_lat') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('$center_lng') ) + sin( radians('$center_lat') ) * sin( radians( lat ) ) ) ) AS distance FROM locations HAVING distance < '$radius' ORDER BY distance LIMIT 0 , 20');



    //$result = $con->query($query);

    if (!$result) {
      die("Invalid query: " . mysqli_error());
    }
    //header("Content-type: text/xml");
    // Iterate through the rows, adding XML nodes for each
    while ($row = @mysqli_fetch_assoc($result)){
      $node = $dom->createElement("marker");
      $newnode = $parnode->appendChild($node);
      $newnode->setAttribute("id", $row['id']);
      $newnode->setAttribute("name", $row['locationName']);
      $newnode->setAttribute("address", $row['locationAddress1']);
      $newnode->setAttribute("lat", $row['locationLat']);
      $newnode->setAttribute("lng", $row['locationLong']);
      $newnode->setAttribute("distance", $row['distance']);
    }
    echo $dom->saveXML();
        }

Как я могу преобразовать это php функциональность до laravel красноречива. Однако я не хочу использовать $con, потому что это строка подключения в corephp. Пожалуйста, помогите

Я пытался с помощью следующего кода

$ok = Location::select('locations.id,ocations.locationName,locations.locationAddress1,locations.locationLat,locations.locationLong,( 3959 * acos( cos( radians('$center_lat') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('$center_lng') ) + sin( radians('$center_lat') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '$radius' ORDER BY distance LIMIT 0 , 20')

1 Ответ

0 голосов
/ 30 марта 2020

Ваш преобразованный laravel запрос

DB::table('locations')->select(DB::raw('locations.id,locations.locationName,locations.locationAddress1,locations.locationLat,locations.locationLong,( 3959 * acos( cos( radians('%s') ) * cos( radians( locations.locationLat ) ) * cos( radians( locations.locationLong ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( locations.locationLat ) ) ) ) AS distance)->having('distance', '<', '%s')->orderBy('distance', 'ASC')->take(20)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...