@haylee.mertz
In Laravel, you can use scopes to apply conditions to a relationship in your Eloquent models. Scopes allow you to define common query constraints that can be reused throughout your application.
To use a scope in a relationship, you need to define the scope in the related model and then use it in the relationship definition in the primary model.
For example, let's say you have a User
model with a posts
relationship. You want to apply a scope to only retrieve published posts. Here's how you can do it:
1 2 3 4 5 6 7 |
class Post extends Model { public function scopePublished($query) { return $query->where('status', 'published'); } } |
1 2 3 4 5 6 7 |
class User extends Model { public function posts() { return $this->hasMany(Post::class)->published(); } } |
Now, when you retrieve posts for a user using the posts
relationship, only published posts will be returned.
You can also chain multiple scopes in a relationship to further refine the query. For example, if you have a scope recent
defined in the Post
model that retrieves posts created within the last week, you can use it like this:
1 2 3 4 |
public function posts() { return $this->hasMany(Post::class)->published()->recent(); } |
This will retrieve only published posts that were created within the last week for the user.