I. Giới thiệu
Chào các bạn, hôm nay mình xin chia sẻ với các bạn Database đơn vị hành chính của Việt Nam: Tỉnh/Thành phố, Quận/Huyện, Phường/Xã cho Laravel.
Package này có:
- Dữ liệu được trích xuất trực tiếp từ Tổng Cục Thống Kê.
- Cài đặt nhanh gọn.
- Có Model Relationship
- Hỗ trợ từ Laravel 5.8 trở lên.
Mã nguồn: Github
II. Cài đặt
Cài đặt package qua composer:
composer require hoangphi/vietnam-maps
Để config package thì có 2 cách dưới đây các bạn có thể chọn.
1. Cách 1:
Nếu bạn không cần tuỳ biến gì có thể config nhanh chóng bằng command:
php artisan vietnam-map:install
2. Cách 2:
Copy file config và migration
php artisan vendor:publish --provider="HoangPhi\VietnamMap\VietnamMapServiceProvider"
Bạn có thể tùy biến Database cho phù hợp với project của mình hoặc có thể bỏ qua bước này và qua phần Import dữ liệu
a. Tùy biến Database
1. Đổi tên bảng
Mở file config/vietnam-maps.php
và chỉnh sửa:
'tables' => [
'provinces' => 'provinces',
'districts' => 'districts',
'wards' => 'wards',
],
2. Đổi tên cột
Mở file config/vietnam-maps.php
và chỉnh sửa:
'columns' => [
'name' => 'name',
'gso_id' => 'gso_id',
'province_id' => 'province_id',
'district_id' => 'district_id',
],
Trong đó gso_id
là mã địa giới chính thức được ban hành theo quyết định số 124/2004/QĐ-TTg của chính phủ vào ngày 08/7/2004.
Cột này sẽ được dùng để tham chiếu cho những lần cập nhật dữ liệu sau này.
Hai cột province_id
và district_id
là khóa ngoại.
3. Thêm cột
Mở file migration sau và tuỳ chỉnh cho phù hợp với project của bạn:
database/migrations/{datetime}_create_vietnam_maps_table.php
b. Import dữ liệu
Chạy lệnh migrate để thực hiện việc tạo bảng.
php artisan migrate
Import dữ liệu vào database bằng command sau:
php artisan vietnam-map:download
Lưu ý: Để migrate được các bạn cần config cho project đã kết nối thành công với database và có kết nối internet để tải dữ liệu về.
III. Sử dụng với Model
- Lấy toàn bộ dữ liệu Tỉnh/Thành Phố, Quận/Huyện, Xã/Phường
use HoangPhi\VietnamMap\Models\Province;
use HoangPhi\VietnamMap\Models\District;
use HoangPhi\VietnamMap\Models\Ward;
class DevController extends Controller
{
...
public function dev()
{
$provinces = Province::all();
$districts = District::all();
$wards = Ward::all();
...
}
}
- Lấy dữ liệu sử dụng Relationship
use HoangPhi\VietnamMap\Models\Province;
class DevController extends Controller
{
...
public function dev()
{
$province = Province::first();
$districts = $province->districts;
...
}
}
- Relationship trong model
Province.php
class Province extends Model
{
...
public function districts()
{
return $this->hasMany(District::class);
}
}
- Relationship trong model
District.php
class District extends Model
{
...
public function province()
{
return $this->belongsTo(Province::class, config('vietnam-maps.columns.province_id'), 'id');
}
public function wards()
{
return $this->hasMany(Ward::class);
}
}
- Relationship trong model
Ward.php
class Ward extends Model
{
...
public function district()
{
return $this->belongsTo(District::class, config('vietnam-maps.columns.district_id'), 'id');
}
}
IV. Tổng kết
Trên đây là bài chia sẽ của mình về package vietnam-maps.
Trong bài viết này mình có tham khảo bài viết của bác Nguyễn Kim Triển để xây dựng package này.
Cảm ơn các bạn đã dành thời gian đọc bài viết của mình!