<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Spatie\Image\Manipulations; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; /** * App\Models\Cat * * @property int $id * @property string $name * @property string $slug * @property string|null $description * @property int $sort * @property string|null $image * @property int|null $parent_id * @property \Illuminate\Support\Carbon|null $deleted_at * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Product[] $active_products * @property-read int|null $active_products_count * @property-read \Illuminate\Database\Eloquent\Collection|Cat[] $children * @property-read int|null $children_count * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * @property-read Cat|null $parent * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Product[] $products * @property-read int|null $products_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Prop[] $props * @property-read int|null $props_count * @method static \Database\Factories\CatFactory factory(...$parameters) * @method static \Illuminate\Database\Eloquent\Builder|Cat newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Cat newQuery() * @method static \Illuminate\Database\Query\Builder|Cat onlyTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Cat query() * @method static \Illuminate\Database\Eloquent\Builder|Cat whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereDeletedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereDescription($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereImage($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereParentId($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereSlug($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereSort($value) * @method static \Illuminate\Database\Eloquent\Builder|Cat whereUpdatedAt($value) * @method static \Illuminate\Database\Query\Builder|Cat withTrashed() * @method static \Illuminate\Database\Query\Builder|Cat withoutTrashed() * @property int $is_main * @method static \Illuminate\Database\Eloquent\Builder|Cat whereIsMain($value) * @mixin \Eloquent */ class Cat extends Model implements HasMedia { use HasFactory, SoftDeletes, InteractsWithMedia; public function registerMediaConversions(Media $media = null): void { $size = explode('x', config('app.thumbnail_size')); $this->addMediaConversion('cat-thumb') ->width($size[0]) ->height($size[1]) ->crop(Manipulations::CROP_CENTER, $size[0], $size[1]) ->optimize() ->sharpen(10); if (isset($_FILES['image'])) { $this->addMediaFromRequest('image')->preservingOriginal(); } } public function thumbUrl() { if ($this->getMedia()->count() > 0) { return $this->getMedia()->first()->getUrl('cat-thumb'); } else { return asset('/images/logo.png'); } } public function imgurl() { if ($this->getMedia()->count() > 0) { return $this->getMedia()->last()->getUrl(); } else { return asset('/images/logo.png'); } } public function products() { return $this->belongsToMany(Product::class); } public function active_products() { return $this->belongsToMany(Product::class)->where('active', 1); } public function backUrl() { if ($this->image == null) { return null; } return \Storage::url('cats/' . $this->image); } // public function parent() { return $this->belongsTo(Cat::class, 'parent_id'); } public function children() { return $this->hasMany(Cat::class, 'parent_id'); } public function getRouteKeyName() { return 'slug'; } public function props() { return $this->belongsToMany(Prop::class); } }