Notable: Ghi chú Đa hình cho Model Laravel
Notable là một gói Laravel giúp thêm chức năng ghi chú đa hình cho bất kỳ model Eloquent nào. Bạn có thể dễ dàng gắn ghi chú hoặc bình luận vào các model với theo dõi người tạo, dấu thời gian và các phương thức truy vấn mạnh mẽ.
Gói này hoàn hảo cho:
- Ghi chú nội bộ
- Nhật ký kiểm toán
- Phản hồi của người dùng
- Tất cả các loại chú thích văn bản có thể theo dõi
✨ Tính năng chính
- 🔗 Mối quan hệ đa hình – Gắn ghi chú vào bất kỳ model Eloquent nào.
- 👤 Theo dõi người tạo – Theo dõi ai đã tạo mỗi ghi chú (người tạo cũng là đa hình!).
- ⏰ Dấu thời gian – Tự động theo dõi
created_atvàupdated_at. - 🔍 Phương thức truy vấn – Các phương thức truy vấn mạnh mẽ để lọc và tìm kiếm ghi chú.
- ⚙️ Có thể cấu hình – Tùy chỉnh tên bảng thông qua tệp cấu hình.
- 🚀 Tích hợp dễ dàng – Triển khai đơn giản dựa trên trait.
- 📦 Sẵn sàng cho Laravel 10+ – Được xây dựng cho các ứng dụng Laravel hiện đại.
🚀 Cài đặt
Cài đặt thông qua Composer:
composer require eg-mohamed/notable
Xuất bản và chạy các migration:
php artisan vendor:publish --tag="notable-migrations"
php artisan migrate
Tùy chọn xuất bản tệp cấu hình:
php artisan vendor:publish --tag="notable-config"
🎯 Bắt đầu nhanh
1️⃣ Thêm Trait vào một Model
php
use MohamedSaid\Notable\Traits\HasNotables;
class SupportTicket extends Model
{
use HasNotables;
}
2️⃣ Bắt đầu thêm ghi chú
php
// Khách hàng thêm một ghi chú
$ticket->addNote('Vẫn gặp vấn đề', $customer);
// Nhân viên hỗ trợ phản hồi
$ticket->addNote('Đang điều tra vấn đề', $agent);
// Lấy lịch sử trò chuyện
$conversation = $ticket->getNotesWithCreator();
📚 Các thao tác phổ biến
php
// Lấy ghi chú
$ticket->getNotes();
$ticket->getNotesToday();
$ticket->getNotesThisWeek();
$ticket->getNotesThisMonth();
$ticket->getNotesInRange('2024-01-01', '2024-12-31');
// Tìm kiếm ghi chú theo nội dung
$ticket->searchNotes('lỗi');
// Kiểm tra xem model có ghi chú không
if ($ticket->hasNotes()) {
echo "Vé này có {$ticket->notesCount()} ghi chú.";
}
🔍 Các phương thức truy vấn nâng cao
php
use MohamedSaid\Notable\Notable;
// Ghi chú của người tạo cụ thể
$notes = Notable::byCreator($user)->get();
// Ghi chú không có người tạo (ghi chú hệ thống)
$systemNotes = Notable::withoutCreator()->get();
// Ghi chú gần đây hoặc cũ hơn
$recentNotes = Notable::recent(7)->get();
$oldNotes = Notable::olderThan(30)->get();
// Các phương thức dựa trên ngày
$todayNotes = Notable::today()->get();
$monthNotes = Notable::thisMonth()->get();
$rangeNotes = Notable::betweenDates('2024-01-01', '2024-12-31')->get();
// Tìm kiếm văn bản
$searchResults = Notable::search('đăng nhập')->get();
🗂 Sơ đồ cơ sở dữ liệu
| Cột | Loại | Mô tả |
|---|---|---|
id |
bigint | Khóa chính |
note |
text | Nội dung ghi chú |
notable_type |
varchar | Loại đa hình (lớp model) |
notable_id |
bigint | ID đa hình (ID model) |
creator_type |
varchar | Loại đa hình của người tạo (có thể null) |
creator_id |
bigint | ID đa hình của người tạo (có thể null) |
created_at |
timestamp | Thời gian tạo |
updated_at |
timestamp | Thời gian cập nhật |
Bạn có thể tùy chỉnh tên bảng trong config/notable.php:
php
return [
'table_name' => 'notables',
];
💡 Ví dụ về các trường hợp sử dụng
Nhật ký hoạt động của người dùng
php
$user->addNote('Đã thay đổi mật khẩu', $admin);
$user->addNote('Đã đăng nhập', $user);
Theo dõi đơn hàng
php
$order->addNote('Đơn hàng đã được gửi', $system);
$order->addNote('Giao hàng thành công', $staff);
Vé hỗ trợ
php
$ticket->addNote('Người dùng đã báo cáo lỗi', $customer);
$ticket->addNote('Sửa lỗi đã được triển khai', $developer);
👨💻 Đóng góp & Hỗ trợ
- Báo cáo sự cố & lỗi: GitHub Issues
- Pull requests luôn được chào đón!
- Được cấp phép theo Giấy phép MIT.
Những lưu ý quan trọng
- Cấu hình: Đảm bảo bạn kiểm tra tệp cấu hình để tùy chỉnh tên bảng theo nhu cầu của dự án.
- Hiệu suất: Sử dụng các phương thức truy vấn một cách hợp lý để đảm bảo hiệu suất tối ưu khi có số lượng lớn ghi chú.
FAQ
1. Notable có tương thích với các phiên bản Laravel nào?
Notable được thiết kế để hoạt động tốt với Laravel 10 và các phiên bản mới hơn.
2. Làm thế nào để tìm kiếm ghi chú theo người tạo?
Bạn có thể sử dụng phương thức Notable::byCreator($user) để lọc ghi chú theo người tạo.
3. Có cách nào để tùy chỉnh cấu trúc bảng không?
Có, bạn có thể sửa đổi tên bảng trong tệp cấu hình config/notable.php.
Kết luận
Gói Notable là một công cụ mạnh mẽ cho phép bạn quản lý ghi chú đa hình trong các ứng dụng Laravel. Bằng cách tận dụng các tính năng như theo dõi người tạo và phương thức truy vấn mạnh mẽ, bạn có thể dễ dàng theo dõi và quản lý thông tin quan trọng trong ứng dụng của mình. Hãy thử nghiệm và tích hợp Notable vào dự án của bạn ngay hôm nay!