Почему костыльно?
Скорее всего вам просто нужно вместо nullable, сделать sometimes и тогда вы будете валидировать поле, только если оно есть в запросе.
count(array_keys($request->validated())) > 0
# route
Route::patch('/projects/{project}/orders/{order}', 'update')->can('view', 'project');
# policy
private function isLinked(User $user, Project $project)
{
return $project->users()->exists($user->id);
}
private function isLinkedOwner(User $user, Project $project) {
return $user->id === $project->user_id;
}
public function view(User $user, Project $project) {
if ($this->isLinkedOwner($user, $project) || $this->isLinked($user, $project)) {
return true;
}
return false;
}