Mam model ucznia (id, imię, school_id) i model szkoły (id, imię, ...) Schemat relacji: szkoła ma wielu uczniów, uczeń może mieć tylko jedną szkołę.Zapisywanie relacji w formularzach yii2 - jak uniknąć duplikowania się atrybutów?
<?php
class School extends \yii\db\ActiveRecord
{
/*.....*/
public function getStudents()
{
return $this->hasMany(Student::className(), ['school_id' => 'id']);
}
/*.....*/
}
?>
Teraz chcę uczynić wyboru dla każdego ucznia w szkole stworzyć postać:.
<?= $form->field($model, 'students')->checkboxList(ArrayHelper::map($allStudents, 'id', 'name')) ?>
($ model jest instancja Szkoła Dla uproszczenia przyjmijmy, że nie ma dużo studentów - tak kontrola pól jest wystarczająca)
Teraz, jeśli chcę dodać regułę sprawdzania poprawności, aby pozwolić maksymalnie 5 studentom (używając metody School :: rules()) - na formularzu przesyłam otrzymuję "Próbuję ustawić uczniom atrybut" tylko do odczytu "
OK, oznacza to, że relacje AR są atrybutami tylko do odczytu w modelach.
Ale jak mogę używać Yii2 activeForm i walidacji używając reguł wtedy, bez stworzenia kolejnego atrybutu fikcyjnego (student_ids), który nie zostanie zapisany do db i będzie używany wyłącznie do celów sprawdzania poprawności?
Czy istnieje "właściwa" droga? Dzięki!
Też myślałem o tym problemie i robiąc kolejny model wyłącznie dla formularza. Jakie rozwiązanie wymyśliłeś? –
Zazwyczaj używam fałszywych atrybutów [fieldname] _ids, które akceptują dane wejściowe i mogą mieć dołączone reguły sprawdzania poprawności. W złożonych przypadkach właściwym sposobem byłoby stworzenie osobnego modelu, takiego jak Ty :) –