The final solution I went with was the following:
- add a method checkRelation that requires all parameters
- run a query inside that method to check if everything is ok.
- return false when there is a problem, return true when values are ok. (alternatively you can return an object or something)
- in the action I check if the value is false, if so I return a generic "not found" page for the specific controller.
In all this is very similar to what I posted in my initial question.
When using the same checkRelation in multiple controllers it might be a good idea to move it (partially) to a repository-class or something similar to prevent duplication of code/logic.