OCMS CURRENT BUILD 476
PHP v7.4.21
I’m working on an OctoberCMS plugin and I’m facing an issue with the onRelationManageCreate method in my Controller. I have multiple relations defined in my model, but I want to apply some logic specifically to one of the hasMany relations called backuptasks. However, the code I’ve tried so far seems to impact all relations to the model instead of just the backuptasks relation.
Here’s a simplified version of my code:
Controller/ControllerName.php
public function onRelationManageCreate($relationName, $recordId = null)
{
// Check if the relation name is 'backuptasks'
if ($relationName === 'backuptasks') {
$maxAllowed = '1';
$relationCount = BackupTask::where('machines_id', $recordId)->count();
if ($relationCount >= $maxAllowed) {
Flash::error('Maximum limit of related records has been reached');
return;
}
}
// Continue with the regular onRelationManageCreate logic
return $this->asExtension('RelationController')->onRelationManageCreate($relationName, $recordId);
}
I’ve tried using conditionals like if ($relationName === ‘backuptasks’) to target the specific relation, but it doesn’t seem to work as expected. The code within the conditional block still affects all relations instead of just backuptasks.
I’ve also tried using other approaches mentioned in the OctoberCMS documentation, such as extending the model and binding events, but I couldn’t find a solution that specifically targets one relation only.
Is there a way to effectively target a specific relation in the onRelationManageCreate method without affecting other relations? Any insights or alternative approaches would be greatly appreciated.
2
Answers
Solved the issue with the below:
I would personally add this type of check within the model’s events
beforeValidate
orbeforeCreate
so it is available everywhere but if you want to do it in the controller you could try the following: