Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 1481 | 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()
1481 lars 27
                ->skipGenerateWhen( function ()
28
                {
29
                    return $this->directory_id < 0;
30
                } );
306 lars 31
        }
32
 
308 lars 33
        function medium(): HasMany
34
        {
644 lars 35
            return $this->hasMany( ItemMedium::class )->orderBy( "rank" );
308 lars 36
        }
37
 
644 lars 38
        public function price(): HasMany
306 lars 39
        {
1618 lars 40
            return $this->hasMany( Price::class )->where("preis","!=",0)->orderBy( "preis_index" );
306 lars 41
        }
644 lars 42
 
645 lars 43
        public function manufacturer(): BelongsTo
644 lars 44
        {
645 lars 45
            return $this->belongsTo( Manufacturer::class );
644 lars 46
        }
1477 lars 47
 
1481 lars 48
        // On the Model class add the following method.
1479 lars 49
 
50
        public function resolveRouteBinding( $value, $field = null ): ?Model
51
        {
1481 lars 52
            $cacheName = "item_" . $value;
1479 lars 53
 
54
            if ( Cache::has( $cacheName ) )
55
            {
56
                return Cache::get( $cacheName );
57
            }
58
 
1480 lars 59
            $result = $this->with( 'price', 'medium.medium', 'manufacturer' )->where( 'slug', $value )->firstOrFail();
1481 lars 60
            Cache::put( $cacheName, $result, 86400 );
1479 lars 61
 
62
            return $result;
63
        }
169 lars 64
    }