Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (6)

Лучшие ответы пользователя

Все ответы (10)
  • Сохранение и валидация relations в yii2 через формы - как избежать дублирования атрибутов в форме?

    restyler
    @restyler Автор вопроса
    Если для кого-то актуально - я решил вопрос введением дополнительного атрибута 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, но это мне кажется лучше приберечь для более сложных кейсов.
    Ответ написан
    Комментировать
  • Почему появляются сразу все элементы?

    restyler
    @restyler
    position() и offset() будут возвращать нули всегда для элемента скрытого через display:none.
    работающий вариант:
    https://jsfiddle.net/cb1g7qq8/1/

    (анимация visibility делается несложно, в гугле есть)
    Ответ написан
    Комментировать
  • В чем ошибка при составлении классов?

    restyler
    @restyler
    Если обсуждать "архитектурно правильные" способы разрешения такой ситуации в ООП и в Yii2 в частности - могу сказать, что ваш случай подпадает под кейс single table inheritance - вот отличный пример из мануала как его готовить.

    В результате при итерации по массиву News::find()->all() у вас там будут экземпляры не News, а NewsAdmin и NewsUser. Является ли вышеупомянутый паттерн оверинжинирингом в вашей ситуации? Решать только вам :) возможно, проще действительно не париться и захардкодить все в базовом классе.
    Ответ написан
    Комментировать
  • Как Вы называете свои таблицы и поля в БД? CamelCase, camelCase, camel_case.....?

    restyler
    @restyler
    основная проблема у under_score стиля (на примере yii2 ActiveRecord) лично для меня в том, что получается мешанина - динамические атрибуты у классов - camelCase, а атрибуты из БД - under_score. Если в своем коде можно это запомнить и объяснить себе некой логикой (если вижу under_score - значит атрибут прямиком из базы прилетел,а cameCase - это динамический атрибут генерируемый php методами) то для пользователей API вашего сервиса (если у вас есть API, конечно) вы никак не объясните такую подозрительную разницу в именовании атрибутов объекта - и при генерации справки для вашего API вам будет стыдно. Что же делать? Видимо, страдать от camelCase в названии колонок в бд (лично я считаю их менее читабельными, чем _) - но деваться некуда, против PSR не попрешь.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (3)