Ok, I answer my self, Attach method works with many to many, so I created a custom action:
Action::make('attach')
->label('Attach Existing')
->form([
Select::make('job_position_id')
->label('Job Position')
->options(
JobPosition::query()
->pluck('name', 'id')
)
->searchable()
->required(),
])
->action(function (array $data) {
JobPosition::find($data['job_position_id'])->update(['parent_id' => $this->ownerRecord->id]);
}),
Also I created a detach custom action:
Action::make('detach')
->label('Detach')
->action(function (JobPosition $record) {
$record->update(['parent_id' => null]);
}),
If you need to create multiple relations on the same form then this is my approach:
Action::make('attach')
->label('Attach Existing')
->form([
Select::make('job_position_id')
->label('Job Position')
->multiple()
->options(
JobPosition::query()
->pluck('name', 'id')
)
->searchable()
->required(),
])
->action(function (array $data) {
foreach ($data['job_position_id'] as $job_position_id) {
JobPosition::find($job_position_id)->update(['parent_id' => $this->ownerRecord->id]);
}
}),