พอดีมีโอกาสได้ไปรู้จักกับ repo ฐานข้อมูล จังหวัด อำเภอ ตำบล ละติจูด ลองจิจูด
ใน GitHub เข้า เลยเอามาใช้กับโปรเจ็คทดลองที่กำลังสร้างด้วย laravel ครับ
ทั้งนี้ทั้งนั้น repo ของคุณ Aaron Amm มีประโยชน์มากๆ ขอขอบคุณไว้ ณ ที่นี้ด้วยครับ
เมื่อได้มีโอกาสใช้งานกับ laravel แล้วก็เลยคิดว่าน่าจะมีประโยชน์ในโปรเจ็คต่อไปในอนาคตด้วย
เลยเอามาทำเป็น laravel package เผื่อไว้ใช้งานในโปรเจ็ตต่อไป
ถ้าเพื่อนๆสนใจก็สามารถเอาไปติดตั้งใช้งานหรือเอาไปต่อยอดกันได้เลยครับ
Repositories
- Github uatthaphon/laravel-thai-address
- Packagist uatthaphon/laravel-thai-address
laravel-thai-address แพคเกจ คืออะไร
แพคเกจ laravel-thai-address คือการนำเอา ฐานข้อมูล จังหวัด อำเภอ ตำบล ที่ได้กล่าวไปแล้วข้างต้น
มาสร้าง เป็น migration สำหรับ laravel framwork โดย จะแบ่งตัว migrations ออกเป็น 3 ไฟล์
เพื่อสร้างตารางในดาต้าเบสแยกกัน
จากนั้นก็ทำการ seeds ข้อมูล ที่อยู่ในรูปแบบของ csv ไฟล์ที่มีอยู่ในแพคเกจเข้าไปยังตารางแต่ละตารางให้ถูกต้อง
หลังจากที่เราได้ทำการ migrate ตารางใหม่เสร็จเป็นที่เรียบร้อย
ติดตั้ง
เพิ่มแพคเกจเข้าไปยังโปรเจ็คของเรา
$ composer require uatthaphon/laravel-thai-address
ถ้าเราใช้ laravel เวอร์ชั่นที่ตำกว่า 5.5 เราต้องทำการเพิ่ม service provide เข้าไปที่ config/app.php
ด้วยตนเอง
<?php
'providers' => [
...
Uatthaphon\ThaiAddress\ThaiAddressServiceProvider::class,
],
แต่สำหรับ laravel version 5.5 ขึ้นไปผมได้เพิ่ม auto discoverable เข้าไปในตัวแพคเกจเรียบร้อยแล้วทำให้เราไม่ต้องทำการเพิ่มบรรทัดเข้าไปยัง config/app.php
จากนั้นทำการรันคำสั่ง verder publish สำหรับแท็ก 3 แท็ก
$ php artisan vendor:publish --tag=migrations
$ php artisan vendor:publish --tag=csv
$ php artisan vendor:publish --tag=seeds
หรือถ้าต้องการ publish แท็กทั้งหมดในคราวเดียวก็สามารถทำได้
$ php artisan vendor:publish
ขั้นตอนต่อไป เราจะมาทำการสร้างตารางหลังจากที่เราทำการ publish ทุกอย่างเป็นที่เรียบร้อยแล้ว
$ php artisan migrate
จากนั้นก็ทำการเพิ่มข้อมูลเข้าไปยังตารางของเราด้วย seeder โดยที่ seeder
จะนำเอาไฟล์ csv ที่ตอนนี้อยู่ในโปรเจ็คของเราเป็นที่เรียบร้อยแล้ว หลังจากเราทำการ publish มันเข้ามา
และเอาข้อมูลที่ได้ ไปเพิ่มเข้าไปยังตารางแต่ละตารางอย่างถูกต้อง
$ php artisan db:seed --class=ThailandAddressSeeder
การใช้งาน
ตอนนี้เราได้ดาต้าเบสที่มีข้อมูล จังหวัด อำเภอ ตำบล รหัสไปรษณีย์ ละติจูด ลองจิจูด มาแล้ว
เราสามารถนำมาประยุกต์ใช้กับโปรเจ็คของเราได้ตามใจชอบเลยครับ
ตัวช่วย
ในแพคเกจของเรามี Models relationship ติดมาให้ใช้ด้วยครับ
ถ้าหากใครต้องการใช้งานตัว Models ไฟล์ที่ผูก relationship ไว้ก็สามารถเพิ่ม psr-4 เข้าไปใน
composer.json
เพื่อเรียกใช้งานในโปรเจ็คได้เลยครับ
ตอนนี้ได้ทำการอัพเดตตัว package แล้วจึงไม่จำเป็นต้องเพิ่ม psr-4 ใน composer.json
ของตัวโปรเจ็คที่เรียกใช้งานครับ ดังนั้นเราสามารถเรียกใช้ตรงๆได้เลยตามตัวอย่างด้านล่างครับ
จากนั้นก็เอาไปใช้ได้เลยครับ
<?php
use Uatthaphon\ThaiAddress\Models\ThailandProvince;
use Uatthaphon\ThaiAddress\Models\ThailandDistrict;
use Uatthaphon\ThaiAddress\Models\ThailandSubdistrict;
...
/**
* Available Relationships
*/
// list all districts under the province
app(ThailandProvince::class)->find(1)->districts()->get();
// get province of the district
app(ThailandDistrict::class)->find(1)->province;
// list all sub districtes under the district
app(ThailandDistrict::class)->find(1)->subdistricts()->get();
// get district of the subdistrict
app(ThailandSubdistrict::class)->find(1)->district;
// get province of the subdistrict
app(ThailandSubdistrict::class)->find(1)->province;
ถ้าใครมีข้อสงสัยก็สามารถคอมเม้นทิ้งไว้ได้นะครับ
หรือถ้ามี bug หรือ issue อะไรก็โพสไว้ที่ github ได้เลยครับ
Top comments (4)
เหมือนจะไปใช้กับ laravel 8 แล้วจะมี error ครับ
ล่าสุด มีการทดสอบถึงแค่ laravel version 5.5 ครับ.
กด watch repo ไว้ก่อนก็ได้ครับ หรือเปิด issue ไว้ใส่รายละเอียดไว้ก็ได้ครับ ช่วงที่มีเวลาเดี๋ยวไปดูให้ครับ
หรือต้องการช่วยอัพเดตก็สามารถ PR มาได้ครับ
ขอเป็นผู้ใช้ก่อนดีกว่าครับ พอดีผมก็ไม่เก่งตรงนี้ด้วยครับ ยังไงก็ขอบคุณครับ
ถ้าอย่างนั้นเปิด issue ใส่รายละเอียดตามด้านล่างไว้ที่
github issue
ได้เลยนะครับ เดี๋ยวผมลองไปเช็คดู