Eloquent advanced
| Query scopes | |
| Accessors | |
| Casts | |
| Touches parents |
Query scopes
Scopes pack a common where clause into a named reusable method. Prefix the method with scope, then call the rest of the name on any query as if it were built in.
class Post extends Model { public function scopePublished($query) { return $query->where("status", "published"); } } $posts = Post::published()->get();
Accessors
Accessors compute a value each time an attribute is read, without storing it in the table. The Attribute return object defines a get callback that formats the raw value on the fly.
use Illuminate\Database\Eloquent\Casts\Attribute; class Author extends Model { protected function name(): Attribute { return Attribute::make( fn ($value) => strtoupper($value), ); } }
Casts
The casts map converts raw database strings into rich PHP types on read. Booleans, integers, arrays, and dates all come back ready to use with no manual conversion.
class Order extends Model { protected $casts = [ "paid" => "boolean", "meta" => "array", ]; }
Touches parents
Child updates should refresh the parent timestamp so lists sort correctly. The touches list names relations to bump, and saving the child then touches each parent automatically.
class Comment extends Model { protected $touches = ["post"]; public function post() { return $this->belongsTo(Post::class); } }
Next: Transactions and locks
Article author: Arthur Isaev