Looking to hire Laravel developers? Try LaraJobs

laravel-thailand maintained by baraear

Description
The package may help Laravel developer store user address by easily way
Author
Last update
2019/10/02 07:59 (dev-master)
License
Links
Downloads
7 519

Comments
comments powered by Disqus

แพคเกจตำบล, อำเภอ, จังหวัด และรหัสไปรษณีย์สำหรับ Laravel Framework


Latest Stable Version Build Status StyleCI Scrutinizer Code Quality Total Downloads GitHub license

แพคเกจนี้จะช่วยให้นักพัฒนาที่ใช้ Laravel Framework ในการพัฒนาสามารถจัดเก็บข้อมูลที่อยู่ได้ง่ายขึ้น

การติดตั้ง

  1. ติดตั้งแพคเกจ baraear/laravel-thailand ผ่านทาง Composer
    composer require baraear/laravel-thailand
    
  2. ทำการเพิ่ม Service Provider ของแพคเกจใน config/app.php
    /*
     * Package Service Providers...
     */
    Baraear\ThaiAddress\ThaiAddressServiceProvider::class,
    
  3. ประกาศใช้งานไฟล์ config ของแพคเกจ
    php artisan vendor:publish --provider="Baraear\ThaiAddress\ThaiAddressServiceProvider" --tag="config"
    
  4. ประกาศใช้งานไฟล์ migration ของแพคเกจ
    php artisan vendor:publish --provider="Baraear\ThaiAddress\ThaiAddressServiceProvider" --tag="migrations"
    php artisan migrate
    
  5. ประกาศใช้งานไฟล์ seeds ของแพคเกจ
    php artisan vendor:publish --provider="Baraear\ThaiAddress\ThaiAddressServiceProvider" --tag="seeds"
    composer dump-autoload
    
  6. เพิ่มข้อมูลตำบล, อำเภอ, จังหวัด และรหัสไปรษณีย์ลงฐานข้อมูล แก้ไขไฟล์ database/seeds/DatabaseSeeder.php ดังนี้
    <?php
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
             $this->call(ThaiAddressTablesSeeder::class);
        }
    }
    
    php artisan db:seed
    

การใช้งาน

หลังจากทำการเพิ่มข้อมูลแล้วโดยปกติผู้ใช้สามารถใช้งานผ่านทาง Models ที่ทางแพคเกจจัดทำไว้ให้ได้เลย ซึ่งมีดังต่อไปนี้ SubDistrict, District, Province และ PostalCode

ตำบล
// ข้อมูลทุกตำบล
$sub_districts = SubDistrict::all();

foreach ($sub_districts as $sub_district) {
    // แสดงข้อมูลตำบล
    print_r($sub_district);
    
    // แสดงข้อมูลอำเภอที่มีความสัมพันธ์กับตำบลนี้
    print_r($sub_district->district);
    
    // แสดงข้อมูลรหัสไปรษณีย์ที่มีความสัมพันธ์กับตำบลนี้
    print_r($sub_district->postal_code);
}
อำเภอ
// ข้อมูลทุกอำเภอ
$districts = District::all();

foreach ($districts as $district) {
    // แสดงข้อมูลอำเภอ
    print_r($district);
    
    // แสดงข้อมูลตำบลที่มีความสัมพันธ์กับอำเภอนี้
    print_r($district->sub_districts);
    
    // แสดงข้อมูลจังหวัดที่มีความสัมพันธ์กับอำเภอนี้
    print_r($district->province);
    
    // แสดงข้อมูลรหัสไปรษณีย์ที่มีความสัมพันธ์กับอำเภอนี้
    print_r($district->postal_codes);
}
จังหวัด
// ข้อมูลทุกจังหวัด
$provinces = Province::all();

foreach ($provinces as $province) {
    // แสดงข้อมูลจังหวัด
    print_r($province);
    
    // แสดงข้อมูลอำเภอที่มีความสัมพันธ์กับจังหวัดนี้
    print_r($province->districts);
    
    // แสดงข้อมูลรหัสไปรษณีย์ที่มีความสัมพันธ์กับจังหวัดนี้
    print_r($province->postal_codes);
}
รหัสไปรษณีย์
// ข้อมูลรหัสไปรษณีย์ทั้งหมด
$postal_codes = PostalCode::all();

foreach ($postal_codes as $postal_code) {
    // แสดงข้อมูลรหัสไปรษณีย์
    print_r($postal_code);
    
    // แสดงข้อมูลตำบลที่มีความสัมพันธ์กับรหัสไปรษณีย์นี้
    print_r($postal_code->sub_district);
    
    // แสดงข้อมูลอำเภอที่มีความสัมพันธ์กับรหัสไปรษณีย์นี้
    print_r($postal_code->district);
    
    // แสดงข้อมูลจังหวัดที่มีความสัมพันธ์กับรหัสไปรษณีย์นี้
    print_r($postal_code->province);
}

ซึ่งหากผู้ใช้ไม่ต้องการใช้งานผ่าน Models ที่แพคเกจจัดทำไว้ผู้ใช้สามารถสร้าง Model ใหม่โดยจำเป็นต้องทำการ implements ด้วย Contract ที่ทางแพคเกจเตรียมไว้ให้และจำเป็นต้องแก้ไข models ในไฟล์ config/thai_address.php ให้ตรงกันด้วย

<?php

namespace App;

use Baraear\ThaiAddress\Contracts\SubDistrict as SubDistrictContract;
use Illuminate\Database\Eloquent\Model;

class SubDistrict extends Model implements SubDistrictContract
{
    //
}
<?php

namespace App;

use Baraear\ThaiAddress\Contracts\District as DistrictContract;
use Illuminate\Database\Eloquent\Model;

class District extends Model implements DistrictContract
{
    //
}
<?php

namespace App;

use Baraear\ThaiAddress\Contracts\Province as ProvinceContract;
use Illuminate\Database\Eloquent\Model;

class Province extends Model implements ProvinceContract
{
    //
}
<?php

namespace App;

use Baraear\ThaiAddress\Contracts\PostalCode as PostalCodeContract;
use Illuminate\Database\Eloquent\Model;

class PostalCode extends Model implements PostalCodeContract
{
    //
}

เมื่อสร้าง Models เองอย่าลืมแก้ไข config

<?php

return [

    'models' => [
        'sub_district' => Baraear\ThaiAddress\Models\SubDistrict::class,
        'district' => Baraear\ThaiAddress\Models\District::class,
        'province' => Baraear\ThaiAddress\Models\Province::class,
        'postal_code' => Baraear\ThaiAddress\Models\PostalCode::class,
    ],

    'table_names' => [
        'sub_district' => 'sub_districts',
        'district' => 'districts',
        'province' => 'provinces',
        'postal_code' => 'postal_codes',
    ],

];

นอกจากนี้แพคเกจยังเตรียมการใช้งาน API ไว้ให้ใช้งานสำหรับท่านที่ใช้ Vue.js และ axios

+--------+----------+----------------------------------+---------------------+--------------------------------------------------------------------------+--------------+
| Domain | Method   | URI                              | Name                | Action                                                                   | Middleware   |
+--------+----------+----------------------------------+---------------------+--------------------------------------------------------------------------+--------------+
|        | GET|HEAD | api/district/all                 | district.all        | Baraear\ThaiAddress\Controllers\ThaiAddressController@getAllDistricts    | api          |
|        | GET|HEAD | api/district/search/{query}      | district.search     | Baraear\ThaiAddress\Controllers\ThaiAddressController@searchDistrict     | api          |
|        | GET|HEAD | api/district/{id}                | district.get        | Baraear\ThaiAddress\Controllers\ThaiAddressController@getDistrict        | api          |
|        | GET|HEAD | api/postal-code/all              | postal-code.all     | Baraear\ThaiAddress\Controllers\ThaiAddressController@getAllPostalCodes  | api          |
|        | GET|HEAD | api/postal-code/search/{query}   | postal-code.search  | Baraear\ThaiAddress\Controllers\ThaiAddressController@searchPostalCode   | api          |
|        | GET|HEAD | api/postal-code/{id}             | postal-code.get     | Baraear\ThaiAddress\Controllers\ThaiAddressController@getPostalCode      | api          |
|        | GET|HEAD | api/province/all                 | province.all        | Baraear\ThaiAddress\Controllers\ThaiAddressController@getAllProvinces    | api          |
|        | GET|HEAD | api/province/search/{query}      | province.search     | Baraear\ThaiAddress\Controllers\ThaiAddressController@searchProvince     | api          |
|        | GET|HEAD | api/province/{id}                | province.get        | Baraear\ThaiAddress\Controllers\ThaiAddressController@getProvince        | api          |
|        | GET|HEAD | api/search/address/{query}       | search.address      | Baraear\ThaiAddress\Controllers\ThaiAddressController@search             | api          |
|        | GET|HEAD | api/sub-district/all             | sub-district.all    | Baraear\ThaiAddress\Controllers\ThaiAddressController@getAllSubDistricts | api          |
|        | GET|HEAD | api/sub-district/search/{query}  | sub-district.search | Baraear\ThaiAddress\Controllers\ThaiAddressController@searchSubDistrict  | api          |
|        | GET|HEAD | api/sub-district/{id}            | sub-district.get    | Baraear\ThaiAddress\Controllers\ThaiAddressController@getSubDistrict     | api          |
+--------+----------+----------------------------------+---------------------+--------------------------------------------------------------------------+--------------+

ผู้ใช้สามารถใช้งานการค้นหาชื่อตำบล, อำเภอ, จังหวัด และรหัสไปรษณีย์ได้ผ่านทาง Baraear\ThaiAddress\Controllers\ThaiAddressController@search หรือผ่าน API api/search/address/{query} ซึ่งการค้นหาจะใช้ keyword ไปค้นหาจากชื่อตำบล, อำเภอ, จังหวัด และรหัสไปรษณีย์ภายในครั้งเดียว