2 Min Read

Membangun Apps MultiTenant dengan Laravel

iman-sugirman Iman Sugirman

Membangun Web apps tentunya banyak sekali pertimbangan antara lain dari sisi sustainable Apps itu sendiri dan memperhatikan database dari member yang terdaftar, kita tentunya akan banyak memikirkan resource dan memori juga dan bagaimana cara menanganinya.

Pada kasus ini saya membuat Project untuk Client saya dengan tujuan Bisa Software bisa disewakan dan bisa mendapatkan banyak member, namun dalam hal ini akan membuat single database. Jadi ada yang harus dikaitkan atau berelasi dengan Tenant itu.

Untuk saat ini Web Apps yang saya buat berjalan lancar dan tidak ada hambatan, hanya saja saya masih susah untuk mengekspektasikan ketika customer sudah sangat banyak maka akan menjadi beban yang berat untuk database dan proses query dari sebuah laporan.

Saat ini juga saya membuat Google Maps Multi Location untuk mendukung Fitur Network dalam Web Apps Tersebut namun kebanyakan tidak compatible dengan Laravel 8 dan kali ini kita akan mengambil package dari githubnya langsung. Saya sendiri menggunakan Package dari rpsimao/laravelgooglemaps. yang mana package tersebut hasil dari fork nya https://github.com/farhanwazir/laravelgooglemaps dan itu tidak masalah, untuk anda yang ingin menggunakan package yang tidak support untuk versi laravel anda, anda juga bisa menggunakan tipe vcs dan berikut pengaturannya.

Fork terlebih dahulu Repo yang akan digunakan, dan ingat **Repo harus terdaftar di packagist. Karena akan kita gunakan di composer, dan edit lah file composer.json edit pada bagian :

  "require": {
    "php": ">=5.6.0",
    "laravel/framework": "6.*"
  },

Ubah menjadi

  "require": {
    "php": ">=5.6.0",
    "laravel/framework": "6.*|7.*|8.*"
  },

Disini case saya menggunakan Laravel versi 8, lalu save dan beri nama l8 untuk branch nya dan tidak perlu pull request karena kita tidak sedang berkontribusi untuk package itu. Namun jika ingin mengubah ke repo tersebut bisa juga sekalian buat Pull Request

Selanjutnya kita tambahkan di composer.json Project kita dengan package google map tersebut, berikut contohnya :

    ...
    "require": {
        ```
        "rpsimao/laravelgooglemaps": "dev-l8"
        ```
    }
    ...

Lalu tambahkan bagian bawah composer.json dengan ini :

    ...
    "scripts": {
        ...
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        ...
    },
    "repositories": [
        { 
            "type": "vcs", 
            "url": "https://github.com/bogordesaincom/laravelgooglemaps" 
        }

    ]

Dan lakukan composer update

composer update

Saatnya Membuat Google Maps

Buatlah controller untuk menerapkannya :

php artisan make:controller SuperMapsController 

Edit / Buat function index di file tersebut :

    ...
    use use FarhanWazir\GoogleMaps\Facades\GMapsFacade as Gmaps;
    ...
    $config = array();
    $config['center'] = 'Indonesia';
    $config['map_height'] = '500px';
    $config['zoom'] = '5';

    GMaps::initialize($config);

    ...
    // Beri Parameter Disini
    ...

    // Marker 1

    $marker['position'] = 'Alamat Dari Marker';
    $marker['infowindow_content'] = 'Nama Di Konten';
    $marker['icon'] = 'PATH_ICON';
    Gmaps::add_marker($marker);

    // Marker 2

    $marker['position'] = 'Alamat Dari Marker';
    $marker['infowindow_content'] = 'Nama Di Konten';
    $marker['icon'] = 'PATH_ICON';
    Gmaps::add_marker($marker);

    $map = GMaps::create_map();

    echo $map['js'];
    echo $map['html']; 

    return view('backend.network.index', ['map' => $map]);
    ...

Dan buat file blade yang akan anda tampilkan dengan cara :

@extends('layouts.app')

@section('title', 'FishlogNetwork')

@section('content')

{!! $map['html'] !!}

@endsection

@push('scripts')
{!! $map['js'] !!}
@endpush

Jangan lupa tambahkan routenya :

Route::get('/network_map', [SuperMapsController::class, 'index'])->name('maps.network');

Dan sekarang selesai.

Happy Coding...