類別:後端套件
| 發布於 2025-06-25 20:19
套件簡介
Metable 是由 Plank 開發的 Laravel 套件,用於 在不修改原有資料表結構的情況下,為
Eloquent 模型添加一對多的元數據(metadata)擴充能力。
這個功能的概念類似 WordPress 的
post_meta、user_meta,讓你可以為每筆資料動態地擴充額外的鍵值資料,而不需要調整資料表欄位。
適用場景
- 動態屬性擴充:對不同的資料記錄存放不同的額外屬性,避免每個屬性都建立一個欄位。
- 自定義欄位:依照用戶需求儲存客製化欄位資料。
- 靈活性與可擴充性:不需更動資料表結構即可新增或修改屬性。
- 多租戶或多配置支援:可用於儲存使用者特定的設定、偏好值等資訊。
安裝套件
✅ 最新版本支援 Laravel 10。
基本使用範例
範例:在 Post 模型中儲存標籤
資料結構說明
安裝後套件會自動建立一個關聯的 meta 資料表來儲存資料,格式如下:
| 欄位名稱 |
說明 |
id |
主鍵 |
metable_id |
關聯模型的 ID(多型關聯) |
metable_type |
關聯模型的類別(多型關聯) |
key |
Metadata 的鍵 |
value |
Metadata 的值 |
type |
儲存資料的原始類型(JSON 等) |
created_at |
建立時間 |
updated_at |
更新時間 |
補充:批次處理與搜尋
參考資源
Laravel Metable:模型自定義元數據擴充套件
套件簡介
Metable 是由 Plank 開發的 Laravel 套件,用於 在不修改原有資料表結構的情況下,為 Eloquent 模型添加一對多的元數據(metadata)擴充能力。
這個功能的概念類似 WordPress 的
post_meta、user_meta,讓你可以為每筆資料動態地擴充額外的鍵值資料,而不需要調整資料表欄位。適用場景
安裝套件
模型中引入 Metable Trait
use Illuminate\Database\Eloquent\Model; use Plank\Metable\Metable; class YourModel extends Model { use Metable; // 其他模型邏輯... }基本使用範例
$model = YourModel::find(1); // 儲存元數據(key-value) $model->setMeta('key', 'value'); // 讀取元數據 $value = $model->getMeta('key'); // 檢查是否存在某個 meta key $hasMeta = $model->hasMeta('key'); // 回傳 true 或 false // 刪除 meta key $model->removeMeta('key');範例:在 Post 模型中儲存標籤
use Illuminate\Database\Eloquent\Model; use Plank\Metable\Metable; class Post extends Model { use Metable; protected $fillable = ['title', 'content']; }// 查找文章 $post = Post::find(1); // 儲存一組標籤元數據 $post->setMeta('tags', ['technology', 'programming']); // 取得元數據 $tags = $post->getMeta('tags'); // 更新元數據 $post->setMeta('tags', ['php', 'laravel']); // 刪除元數據 $post->removeMeta('tags');資料結構說明
安裝後套件會自動建立一個關聯的
meta資料表來儲存資料,格式如下:idmetable_idmetable_typekeyvaluetypecreated_atupdated_at補充:批次處理與搜尋
// 取得特定 meta key 有指定值的模型 $posts = Post::whereHasMeta('tags', 'laravel')->get(); // 模糊比對 $posts = Post::whereMeta('tags', 'like', '%laravel%')->get();參考資源