nama_obat); // Ambil semua kategori dari database $categories = \App\Models\Category::all(); foreach ($categories as $cat) { // Pecah kata kunci berdasarkan koma $keywords = explode(',', strtolower($cat->keywords)); foreach ($keywords as $keyword) { if (str_contains($name, trim($keyword))) { $medicine->category_id = $cat->id; $medicine->kategori = $cat->name; // Sinkronisasi teks kategori return; } } } $medicine->kategori = 'Umum'; }); } /** * Casting tipe data untuk presisi medis. */ protected $casts = [ 'expired_date' => 'date', // Memperbaiki error isPast() di Blade 'qty' => 'float', // Mendukung dosis desimal seperti 2.5 ml ]; /** * Accessor: Mempermudah pemanggilan foto produk dengan fallback image. */ public function getFotoUrlAttribute(): string { if ($this->foto_produk && Storage::disk('public')->exists($this->foto_produk)) { return asset('storage/' . $this->foto_produk); } // Menggunakan UI Avatars sebagai placeholder jika foto tidak ada return 'https://ui-avatars.com/api/?name=' . urlencode($this->nama_obat) . '&background=f1f5f9&color=64748b'; } /** * Relasi ke riwayat pengobatan kucing. */ public function treatments(): HasMany { return $this->hasMany(Treatment::class, 'medicine_id'); } }