There should be a method like Relation::additionalFilter() to join table.
Use case
In the partnerportal I join contracts to a customer. It would be nice to have an additional filter to join only non-archived contracts.
Example
Customer::createRelations(Relations $relations)
{
$relations
->hasMany('contract', Contract::class)
->additionalFilter('contract.archived', 0)
->setJoinType('LEFT');
}