Если для кого-то актуально - я решил вопрос введением дополнительного атрибута selectedStudents у класса School, он в бд не пишется, существует чисто для формы и для валидационных правил.
В afterSave хуке в School мы делаем примерно такое:
$students = Student::find()->where(['id' => $this->selectedStudents])->all();
foreach ($students as $student) {
$student->school_id = $this->id; // еще можно использовать метод link()
$student->save();
}
Если подобных дублей атрибутов (students readonly и selectedStudents read/write) хочется избежать любой ценой - надо вводить отдельную модель для формы, чтобы в модели School оставался только relation, а в модели формы уже был атрибут selectedStudents, но это мне кажется лучше приберечь для более сложных кейсов.