When querying an entity, you may want to restrict the query based on the existence or absence of a related entity. You can do that using the following four methods:
Name | Type | Required | Default | Description |
relationshipName | String |
| ​ | The relationship to check. Can also be a dot-delimited list of nested relationships. |
operator | String |
|
| An optional operator to constrain the check. See qb for a list of valid operators. |
count | numeric |
|
| An optional count to constrain the check. |
negate | boolean |
|
| If true, checks for the the absence of the relationship instead of its existence. |
Checks for the existence of a relationship when executing the query.
By default, a has
constraint will only return entities that have one or more of the related entity.
getInstance( "User" ).has( "posts" ).get();
An optional operator and count can be added to the call.
getInstance( "User" ).has( "posts", ">", 2 ).get();
Nested relationships can be checked by passing a dot-delimited string of relationships.
getInstance( "User" ).has( "posts.comments" ).get();
Name | Type | Required | Default | Description |
relationshipName | String |
| ​ | The relationship to check. Can also be a dot-delimited list of nested relationships. |
operator | String |
|
| An optional operator to constrain the check. See qb for a list of valid operators. |
count | numeric |
|
| An optional count to constrain the check. |
Checks for the absence of a relationship when executing the query.
By default, a doesntHave
constraint will only return entities that have zero of the related entity.
getInstance( "User" ).doesntHave( "posts" ).get();
An optional operator and count can be added to the call.
getInstance( "User" ).doesntHave( "posts", "<=", 1 ).get();
Nested relationships can be checked by passing a dot-delimited string of relationships.
getInstance( "User" ).doesntHave( "posts.comments" ).get();
Name | Type | Required | Default | Description |
relationshipName | String |
| ​ | The relationship to check. Can also be a dot-delimited list of nested relationships. |
closure | Function |
| ​ | A closure to constrain the relationship check. |
operator | String |
|
| An optional operator to constrain the check. See qb for a list of valid operators. |
count | numeric |
|
| An optional count to constrain the check. |
negate | boolean |
|
| If true, checks for the the absence of the relationship instead of its existence. |
When you need to have more control over the relationship constraint, you can use whereHas
. This method operates similarly to has
but also accepts a callback to configure the relationship constraint.
The whereHas
callback is passed a builder instance configured according to the relationship. You may call any entity or query builder methods on it as usual.
getInstance( "User" ).whereHas( "posts", function( q ) {q.where( "body", "like", "%different%" );} ).get();
When you specify a nested relationship, the builder instance is configured for the last relationship specified.
getInstance( "User" ).whereHas( "posts.comments", function( q ) {q.where( "body", "like", "%great%" );} ).get();
An optional operator and count can be added to the call, as well.
getInstance( "User" ).whereHas( "posts.comments", function( q ) {q.where( "body", "like", "%great%" );}, ">", 2 ).get();
Name | Type | Required | Default | Description |
relationshipName | String |
| ​ | The relationship to check. Can also be a dot-delimited list of nested relationships. |
closure | Function |
| ​ | A closure to constrain the relationship check. |
operator | String |
|
| An optional operator to constrain the check. See qb for a list of valid operators. |
count | numeric |
|
| An optional count to constrain the check. |
The whereDoesntHave
callback is passed a builder instance configured according to the relationship. You may call any entity or query builder methods on it as usual.
getInstance( "User" ).whereDoesntHave( "posts", function( q ) {q.where( "body", "like", "%different%" );} ).get();
When you specify a nested relationship, the builder instance is configured for the last relationship specified.
getInstance( "User" ).whereDoesntHave( "posts.comments", function( q ) {q.where( "body", "like", "%great%" );} ).get();
An optional operator and count can be added to the call, as well.
getInstance( "User" ).whereDoesntHave( "posts.comments", function( q ) {q.where( "body", "like", "%great%" );}, ">", 2 ).get();