Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 1479 | Revision 1481 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
2 lars 1
<?php
2
 
306 lars 3
    namespace App\Models;
2 lars 4
 
306 lars 5
    use Illuminate\Database\Eloquent\Factories\HasFactory;
6
    use Illuminate\Database\Eloquent\Model;
645 lars 7
    use Illuminate\Database\Eloquent\Relations\BelongsTo;
308 lars 8
    use Illuminate\Database\Eloquent\Relations\HasMany;
1477 lars 9
    use Illuminate\Support\Facades\Cache;
306 lars 10
    use Spatie\Sluggable\HasSlug;
11
    use Spatie\Sluggable\SlugOptions;
2 lars 12
 
306 lars 13
    class Item extends Model
14
    {
15
        use HasFactory, HasSlug;
169 lars 16
 
306 lars 17
        /**
18
         * Get the options for generating the slug.
19
         */
20
        public function getSlugOptions(): SlugOptions
21
        {
22
            return SlugOptions::create()
23
                ->generateSlugsFrom( 'name' )
24
                ->saveSlugsTo( 'slug' )
25
                ->usingLanguage( 'de' )
26
                ->doNotGenerateSlugsOnUpdate()
27
                ->skipGenerateWhen( fn() => $this->directory_id < 0 );
28
        }
29
 
308 lars 30
        function medium(): HasMany
31
        {
644 lars 32
            return $this->hasMany( ItemMedium::class )->orderBy( "rank" );
308 lars 33
        }
34
 
644 lars 35
        public function price(): HasMany
306 lars 36
        {
644 lars 37
            return $this->hasMany( Price::class )->orderBy( "preis_index" );
306 lars 38
        }
644 lars 39
 
645 lars 40
        public function manufacturer(): BelongsTo
644 lars 41
        {
645 lars 42
            return $this->belongsTo( Manufacturer::class );
644 lars 43
        }
1477 lars 44
 
1479 lars 45
// On the Model class add the following method.
46
 
47
        public function resolveRouteBinding( $value, $field = null ): ?Model
48
        {
49
            $cacheName = "item_{$value}";
50
 
51
            if ( Cache::has( $cacheName ) )
52
            {
53
                return Cache::get( $cacheName );
54
            }
55
 
1480 lars 56
            $result = $this->with( 'price', 'medium.medium', 'manufacturer' )->where( 'slug', $value )->firstOrFail();
1479 lars 57
            Cache::put( $cacheName, $result, 3600 );
58
 
59
            return $result;
60
        }
169 lars 61
    }