Articole
laravel-developer

Laravel: cum să denumești scope-urile și metodele

Scope-urile din Laravel fac codul mult mai ușor de citit și de înțeles și, în același timp, funcționează ca filtre.

Laravel: cum să denumești scope-urile și metodele

Scope-uri

În Laravel, filtrele, sau mai bine zis scope-urile, pot fi folosite atunci când interogați un model printr-un anumit lanț de metode. Putem porni de la următorul exemplu:
	Post::whereNotNull('published_at')->get();
Acesta va returna toate postările a căror coloană published_at nu este null, sau, mai simplu spus, toate postările active. Cu un scope, codul arată astfel:
	class Post extends Model
	{
        /**
         * The attributes that should be cast to native types.
         *
         * @var array
         */
        protected $casts = [
            'published_at' => 'datetime',
        ];
	
        public function scopeActive($query)
        {
            return $query->whereNotNull('published_at');
        }
	}
Utilizarea arată astfel:
	Post::active()->get();
Scope-urile pot primi și parametri. De exemplu, dacă aveți nevoie de un scope care primește o dată, îl puteți numi „scopePublishedUntil” sau „scopePublishedBefore”. Arată cam așa:
    public function scopePublishedUntil($query, $param)
    {
        return $query->where('published_at', '<=', $param);
    }
Îl puteți folosi astfel:
	Post::publishedUntil('2021-11-09')->get();

Metode Has/Is

Puteți scrie metodele cum preferați, dar nu uitați lucrul de bază: denumirea este cheia! Este, totodată, cel mai dificil lucru în programare. Recent am dat peste un bug serios într-un cod, iar cauza era denumirea așa-numitelor „funcții booleene”, adică funcții care ar trebui să returneze doar o valoare booleană. Regula simplă este: oricare ar fi numele metodei, dacă începe cu „is” sau „has”, tipul returnat trebuie să fie boolean. Iată un exemplu corect:
    public function isPublished(): bool
    {
        return $this->published_at !== null;
    }
Această metodă returnează „true” sau „false” în funcție de condiția din interior. Aveți grijă ca tipul returnat să nu fie altceva decât boolean. Încă o dată: denumirea este cheia!

sursa