Relationships
Define relationship fields on your resource using the ToOne
and ToMany
fields.
use Tobyz\JsonApiServer\Schema\Field\{ToMany, ToOne};
ToOne::make('user');
ToMany::make('comments');
Resource Type
By default, the resource that the relationship corresponds to will be the pluralized form of the relationship name. In the example above, the user
relationship would correspond to the users
collection, while comments
would correspond to comments
.
If you'd like to use a different resource, call the type
method:
ToOne::make('author')->type('people');
Polymorphic Relationships
To define a polymorphic relationship, you will need to first create a heterogeneous collection to define the resource types that may exist in the relationship, and logic for mapping models to their representative resource types.
Once you have defined and registered the collection, you can use it for a relationship by calling the collection
method with the name of the collection:
ToMany::make('activity')->collection('activity');
Resource Linkage
By default, to-one relationships will have resource linkage, but to-many relationships will not. You can toggle this by calling the withLinkage
or withoutLinkage
methods.
ToOne::make('user')->withoutLinkage();
ToMany::make('roles')->withLinkage();
DANGER
Be careful when enabling linkage on to-many relationships as pagination is not supported.
Relationship Inclusion
To make a relationship available for inclusion via the include
query parameter, call the includable
method.
ToOne::make('user')->includable();
ToMany::make('roles')->includable();
DANGER
Be careful when making to-many relationships includable as pagination is not supported.