Выборка Laravel 5.4 из базы данных для json

я просто хочу спросить, так как laravel 5.4 удалил метод выборки... что было бы лучшей альтернативой, которую я могу использовать для своего кода. Вот мой код:

@php

    $someArray = array();

// Проходим по циклу и помещаем результаты в $someArray;

    while ($row = $query->fetch_assoc()) {
        array_push($someArray, array(
       'title' => $row['school_name'],
       'lat' => $row['latitude'],
       'lng' => $row['longitude'],
       'description' => $row['enrollment_sy_2014_2015']
        ));

    }

    // Convert the Array to a JSON String and echo it
    $someJSON = json_encode($someArray);
    echo $someJSON;

   @endphp

так как мне нужны «название», «лат», «длина» и «описание» в качестве переменных для моей карты. Вот код для моей карты: И я надеюсь, что кто-нибудь может помочь :))

function LoadMap() {
    var mapOptions = {
        center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);

    //Create and open InfoWindow.
    var infoWindow = new google.maps.InfoWindow();

    for (var i = 0; i < markers.length; i++) {
        var data = markers[i];
        var myLatlng = new google.maps.LatLng(data.lat, data.lng);
        var marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: data.title
        });

        //Attach click event to the marker.
        (function (marker, data) {
            google.maps.event.addListener(marker, "click", function (e) {
                //Wrap the content inside an HTML DIV in order to set height and width of InfoWindow.
                infoWindow.setContent("<div style = 'width:200px;min-height:40px'>" + data.description + "</div>");
                infoWindow.open(map, marker);
            });
        })(marker, data);
    }
}

person jeanawhou    schedule 21.03.2017    source источник


Ответы (1)


Если вы используете Eloquent, Laravel предоставляет метод toJson() для ваших коллекций и моделей.

https://laravel.com/docs/5.4/eloquent-serialization#serializing-to-json

Вы также можете преобразовать ответ с помощью метода json().

В вашем случае это может быть что-то вроде:

    foreach($collection as $item) {
        $data[] = [
            'title' => $item->school_name,
            'lat' => $item->latitude,
            'lng' => $item->longitude,
            'description' => $item->enrollment_sy_2014_2015
        ];
    }
    return response()->json($data);
person Jachinair    schedule 21.03.2017
comment
но я пытаюсь использовать эти 4 строки как переменные 'title' => $row['school_name'], 'lat' => $row['latitude'], 'lng' => $row['longitude'], ' description' =› $row['enrollment_sy_2014_2015'], который будет использоваться здесь: var myLatlng = new google.maps.LatLng(data.lat, data.lng); position: myLatlng, map: map, title: data.title И здесь: infoWindow.setContent(‹div style = 'width:200px;min-height:40px'› + data.description + ‹/div›); - person jeanawhou; 22.03.2017
comment
Я отредактировал свой ответ. Посмотрите, подходит ли он вам лучше сейчас. - person Jachinair; 22.03.2017
comment
Хммм... Я просмотрел исходный код, поскольку веб-страница ничего не отображает, и вот что я получил: var markers = HTTP/1.0 200 OK Cache-Control: no-cache, private Content-Type: application/json [{title:F . Bangoy NHS, широта: 7.118366409, длина: 125.653946300, описание: 4927}, {название: F. Bustamante NHS, lat: 7.190484185, lng: 125.646700700, описание: 3299}] ; Тем не менее, я бы проверил ваш ответ .. Большое спасибо :)) - person jeanawhou; 22.03.2017
comment
Я забыл, что могу использовать echo json_encode($data); Моя карта теперь работает. Еще раз спасибо @Jachinair - person jeanawhou; 24.03.2017
comment
Я не знаю вашего кода, но если вы используете Laravel, я думаю, что лучше возвращать HTTP-ответ, чтобы следовать рабочему процессу вашего приложения, а не повторять что-то между двумя функциями. Но трудно понять, почему return response()->json($data); ничего не отображает в вашем случае. - person Jachinair; 24.03.2017
comment
Хм... Я пытался это понять... Но, может быть, return response()->json($data); дает мне json, но с заголовками. И мне нужно только это значение json, и echo json_encode($data); пока меня удовлетворяет своими результатами. - person jeanawhou; 30.03.2017