Comment on page
Relationships
When relationships are defined during the customization step, Forest Admin Collections act as if the 2 Collections were natively linked at the data source level.
You may have noticed that relationships within a data source are configured out of the box, so you won't need to define those.
However, you may want to create additional intra and cross data source relationships to:
- help users navigate within your admin panel,
- create charts that use data from multiple data sources,
- let users filter, use scopes, or segment with conditions that cross data source boundaries.
use ForestAdmin\AgentPHP\DatasourceCustomizer\CollectionCustomizer;
use ForestAdmin\SymfonyForestAdmin\Service\ForestAgent;
$forestAgent->customizeCollection(
'Town',
function (CollectionCustomizer $builder) {
$builder
// Towns belong to 1 country
->addManyToOneRelation(
name: 'country',
foreignCollection: 'Country',
foreignKey: 'country_id'
)
// Towns have 1 mayor
->addOneToOneRelation(
name: 'myMayor',
foreignCollection: 'Mayor',
originKey: 'town_id'
)
// Towns have multiple inhabitants
->addOneToManyRelation(
name: 'inhabitants',
foreignCollection: 'Person',
originKey: 'town_id'
)
// Towns electricity is supplied by power-plants which are shared with other towns.
->addManyToManyRelation(
name: 'energyProviders',
foreignCollection: 'PowerPlant',
throughCollection: 'UtilityContract',
originKey: 'town_id',
foreignKey: 'power_plant_id'
);
->addExternalRelation(
'honoraryCitizen',
[
'schema' => ['firstName' => 'String', 'lastName' => 'String'],
'listRecords' => function ($record) {
$client = new \GuzzleHttp\Client();
$response = $client->get('https://api.example.com/user/' . $record['id']);
return $response->getBody();
}
]
)
}
);
Last modified 1mo ago