'integer', 'city_id' => 'integer', 'github_data' => 'json', 'simplified_geojson' => 'array', ]; protected static function booted() { static::creating(function ($model) { if (! $model->created_by) { $model->created_by = auth()->id(); } }); } public function getSlugOptions(): SlugOptions { return SlugOptions::create() ->generateSlugsFrom(['name']) ->saveSlugsTo('slug') ->usingLanguage(Cookie::get('lang', config('app.locale'))); } public function registerMediaConversions(Media $media = null): void { $this ->addMediaConversion('preview') ->fit(Manipulations::FIT_CROP, 300, 300) ->nonQueued(); $this->addMediaConversion('thumb') ->fit(Manipulations::FIT_CROP, 130, 130) ->width(130) ->height(130); } public function registerMediaCollections(): void { $this->addMediaCollection('logo') ->singleFile() ->useFallbackUrl(asset('img/einundzwanzig.png')); } public function createdBy(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } public function users() { return $this->belongsToMany(User::class); } public function city(): BelongsTo { return $this->belongsTo(City::class); } public function meetupEvents(): HasMany { return $this->hasMany(MeetupEvent::class); } protected function logoSquare(): Attribute { $media = $this->getFirstMedia('logo'); if ($media) { $path = str($media->getPath())->after('storage/app/'); } else { $path = 'public/fallback/einundzwanzig.png'; } return Attribute::make( get: fn () => url()->route('img', [ 'path' => $path, 'w' => 900, 'h' => 900, 'fit' => 'crop', 'fm' => 'webp', ]), ); } }