67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Support\Str;
|
|
|
|
class Supply extends Model
|
|
{
|
|
protected $table = 'supplies';
|
|
protected $guarded = ['id'];
|
|
|
|
public function category(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Category::class, 'category_id');
|
|
}
|
|
|
|
protected static function booted()
|
|
{
|
|
parent::booted();
|
|
|
|
static::saving(function ($supply) {
|
|
// 1. Sinkronisasi Slug (Mencegah error SQL sebelumnya)
|
|
if ($supply->isDirty('nama_perlengkapan') || empty($supply->slug)) {
|
|
$supply->slug = Str::slug($supply->nama_perlengkapan) . '-' . Str::random(5);
|
|
}
|
|
|
|
// 2. Auto-Categorization
|
|
if (empty($supply->category_id)) {
|
|
$name = strtolower($supply->nama_perlengkapan);
|
|
|
|
// Ambil kategori yang punya keywords
|
|
$categories = Category::whereNotNull('keywords')->get();
|
|
|
|
foreach ($categories as $cat) {
|
|
$keywords = explode(',', strtolower($cat->keywords));
|
|
|
|
foreach ($keywords as $keyword) {
|
|
$trimmed = trim($keyword);
|
|
|
|
// Cek apakah "pasir" atau keyword lain ada di nama produk
|
|
if (!empty($trimmed) && str_contains($name, $trimmed)) {
|
|
$supply->category_id = $cat->id;
|
|
// PENTING: Update kolom teks 'kategori' agar tampilan tidak 'Umum'
|
|
$supply->kategori = $cat->name;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 3. Fallback jika tidak ada yang cocok
|
|
// Cari kategori yang mengandung kata 'Pasir' atau 'Umum'
|
|
$default = Category::where('name', 'LIKE', '%Pasir%')
|
|
->orWhere('name', 'Umum')
|
|
->first();
|
|
|
|
if ($default) {
|
|
$supply->category_id = $default->id;
|
|
$supply->kategori = $default->name;
|
|
} else {
|
|
$supply->kategori = 'Umum';
|
|
}
|
|
}
|
|
});
|
|
}
|
|
} |