Articole
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.
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