You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.9 KiB

3 days ago
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Venue extends Model
{
use HasFactory;
protected $fillable = [
'name',
'venue_type',
2 days ago
'venue_types',
3 days ago
'unit_name',
'district',
'ticket_type',
2 days ago
'appointment_type',
3 days ago
'open_time',
'reservation_notice',
'study_courses',
'address',
2 days ago
'contact_phone',
3 days ago
'lat',
'lng',
'cover_image',
'gallery_media',
'detail_html',
'live_people_count',
'sort',
'is_active',
];
protected $casts = [
'is_active' => 'boolean',
'gallery_media' => 'array',
2 days ago
'venue_types' => 'array',
3 days ago
'lat' => 'float',
'lng' => 'float',
'sort' => 'integer',
'live_people_count' => 'integer',
];
2 days ago
protected static function booted(): void
{
static::saving(function (Venue $v) {
$types = $v->venue_types;
if (is_array($types) && count($types)) {
$clean = array_values(array_filter(array_map('strval', $types), fn ($s) => $s !== ''));
$v->venue_types = $clean;
$v->venue_type = $clean[0] ?? null;
} elseif (! empty($v->venue_type)) {
$v->venue_types = [$v->venue_type];
} else {
$v->venue_type = null;
$v->venue_types = null;
}
});
}
public function activities(): HasMany
{
return $this->hasMany(Activity::class);
}
3 days ago
public function admins(): BelongsToMany
{
return $this->belongsToMany(User::class, 'user_venue')->withTimestamps();
}
public function reservations(): HasMany
{
return $this->hasMany(Reservation::class);
}
}