登録画面で登録した外出先をGoogleMapに表示させます。今回はピンを表示するところまで実装します。

DBからデータを取得する(クエリビルダを使用)

DBからデータを取得し、画面に渡します。クエリビルダのget

MemoryMap/app/Http/Controllers/MemoryMapController.php

use App\gaishutsu_kiroku;     
     // Map画面を返却する
     public function displayMap(){
     
        //インスタンス化
        $data = gaishutsu_kiroku::get();

     //viewファイルに情報を渡す
        return view('displayMap', ['data' => $data]);
    }

useでモデルを指定してるので [モデル]::get の記載でDBの中身を全量取得できます。

今後は条件指定で取得する様にしますが今回は全量取得します。

return view(‘displayMap’, [‘data’ => $data]); と書くことで、
「data」という変数名で displayMapView に取得したデータを渡すことができます。

Googlemapに複数マーカーを表示

googlemapに複数のマーカーを表示します。

MemoryMap/resources/views/displayMap.blade.php

<!DOCTYPE HTML>
<HTML>

<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <TITLE>思い出MAP</TITLE>
    <link rel="stylesheet" type="text/css" href="css/displayMap.css" media="all">
</HEAD>

<BODY>

     <header>
        <p class="head_title">思い出<span>MAP</span></p>
        <nav>
            <ul>
                <li><a href="/MemoryMap/public/displayMap">MAP</a></li>
                <li><a href="/MemoryMap/public/torokuGamen">登録</a></li>
                <li><a href="">一覧</a></li>
            </ul>
        </nav>
    </header>

    <div id="map" class="map"></div>
    <script async
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC0jk-vadOR5ZWLZjhSrCzK_J2McxzbqNM&callback=initMap"></script>

    <script>
        
        var map;
        
        <!-- コントローラーから渡された$dataを取得 -->
        var data = @json($data);
        
        <!-- マーカーを複数置くため配列で定義 -->
        var marker = [];

        function initMap() {
            map = new google.maps.Map(document.getElementById('map'), {
                center: { lat: 35.681236, lng: 139.767125 },
                zoom: 12
            });
            
            <!-- 取得したデータのレコード数分処理を繰り返す -->
            for (var i = 0; i < data.length; i++) {

              <!-- マーカーを置く緯度・経度にDBの値をセットする -->
              markerLatLng = {lat: data[i]['ido'], lng: data[i]['keido']}; 
              marker[i] = new google.maps.Marker({ 
              position: markerLatLng, 
              map: map 
              });
            }
        };

    </script>

</BODY>

</HTML>

以下の記載でコントローラーから渡ってきたデータを data に格納してviewで使用できるようにします。

var data = @json($data);

繰り返し文で取得したレコード分処理を繰り返します。

for (var i = 0; i < data.length; i++) {

data[i][‘カラム名’]でレコードの値を取得できます。

DBの [‘ido’] [‘keido’] の値を取得してマーカーの表示場所を指定します。

markerLatLng = {lat: data[i]['ido'], lng: data[i]['keido']}; 
marker[i] = new google.maps.Marker({ 
position: markerLatLng, 
map: map 

実際に動かします。現在はマーカーが3つ表示されています。

登録画面から出かけた場所を追加します。

Mapの表示画面に戻ると、マーカーが追加されました。

次回はマーカーに情報ウインドウを追加します。