Vladislav
а если что-то специфическое, то юзай более подходящие интсрумены
Vladislav
в любом случае, Query внури использует тот же DbCommand
Niko
ну это я видел. ok, спасибо
Alexey
как запретить редактировать атрибут модели по условию?
Если атрибут А === true тогда запретить редактировать атрибут В?
Vladislav
пиши свой валидатор
Vladislav
или beforeSave переопердели
Alexey
вот я и хочу написать что-то типа такого
// ['phone', 'skip', 'when' => function ($model) {
// return $model->status === self::STATUS_VERIFIED;
// }]
SiZE
а что мешает? :)
Alexey
я не понимаю что должен вернуть мой валидатор, если добавить ошибку в модель, тогда вся модель не сохраняется
Alexey
было так изначально
['phone', function ($attribute) {
if ($this->status === self::STATUS_VERIFIED) {
$this->addError($attribute, 'Нельзя редактировать подтвержденный телефон.');
}
}]
Alexey
конечно же так модель вообще не сохраняется
SiZE
так скип же исключит правило и не кинет ошибку
SiZE
ну только без 'skip'
SiZE
just when
SiZE
http://www.yiiframework.com/doc-2.0/yii-validators-validator.html#$when-detail
Alexey
так?
['phone', 'when' => function ($model) {
return $model->status !== self::STATUS_VERIFIED;
}]
Alexey
так ошибка, нужно указать валидатор
SiZE
очевидно же что нет :)
Alexey
а какой валидатор использовать чтобы просто скипнулось?
SiZE
просто удалить phone из rules
Alexey
а если его удалить, оно всегда будет unsafe и тогда его никогда нельзя будет редактировать, так?
SiZE
у тебя он сейчас как редактируется то?
Alexey
телефон можно редактировать до тех пор пока он не подтвержден админом и у этого атрибута в правилах есть 2 валидации - проверка на длину и на то, что оно должно содержать только цифры
Alexey
я хочу добавить 3 правило, которое запретит редактирование если админ подтверил телефон
Alexey
что-то заклинило меня на какой-то элементарщине ))
Alexey
наверное придется в beforeSafe писать условие
Alexey
или надо тем двум правилам, которые уже есть добавить условие
'when' => function ($model) {
return $model->status !== self::STATUS_VERIFIED;
}
SiZE
надо тем двум правилам, которые уже есть добавить условие
Alexey
@sizepermru спасибо :)
Alexey
Borys
Ребят, чот не вижу в доке.
Borys
Как в behaviors анонимку пхнуть?
Niko
Делаю запрос
$userData = User::find()->one()
и
$userData = User::find()->with('posts', 'profile', 'settings')->one();
$this->view->params['user'] = $userData;
$this->view->params['post'] = $userData->posts;
$this->view->params['profile'] = $userData->profile;
$this->view->params['settings'] = $userData->settings;
Дебаг показывает, что колличество запросов в BD меньше на 1 с первым вариантом
Как это может быть?
Niko
То же если указываю joinWith() - никакого уменьшения колличества запросов
Konstantin
ты сами запросы смотри
Niko
28шт
Konstantin
может у тебя еще считаются запросы, которые читают метаданные
Konstantin
или еще какая-то байда
Konstantin
ну и что, что 28 штук? :)
Konstantin
но вообще если у тебя ОДИН пользователь...
Konstantin
то with тебе вообще никак не поможет
Niko
стандартная байда считается, но их должно быть около 10
Не понимаю почему нет разницы в колличестве запросов после присваивания связанных обектов?
Konstantin
а ты посмотри на сами запросы
Konstantin
вот если безо всяких with
Konstantin
у тебя есть там запрос SELECT * FROM posts WHERE user_id = X?
Niko
А что вот это такое?
SHOW FULL COLUMNS FROM profile
Konstantin
может у тебя еще считаются запросы, которые читают метаданные
Konstantin
я ж говорю
Konstantin
он спрашивает, какие колонки есть в таблице profile
Niko
таких 10шт на разные таблицы
Konstantin
http://www.yiiframework.com/doc-2.0/guide-tutorial-performance-tuning.html#enable-schema-caching
Konstantin
логично
Konstantin
это можно закешировать, если прямо уж совсем приперло
Konstantin
тогда не будет
Niko
Ок, спасибо. Сейчас закеширую и посмотрю на колличество
Konstantin
ну они все и уйдут
Konstantin
мне кажется, что ты напрасно вцепился в количество запросов
Niko
120ms на какую-то фигню уходит. Обидно!
Niko
@beowulfenator с кешем с 28шт(120ms) до 14шт(4 ms) обработка поменялась)))
Konstantin
я бы кеширование только в продакшне включал
Niko
я так и сделаю, но теперь знаю куда идет время)))
Niko
не думал, что будет такая разница
mr.
На деве ставлю чтобы запросы мониторить.
Yura
Подкиньте плиз репо какой нить покрытый codeception тестами?
Алимжан
https://github.com/yiisoft/yii2-app-basic
Vladislav
lol
Vladislav
лучший ответ)
Borys
Подскажите, где в доке упоминается за multiple save что-бы сохранение моделей в цикл не пхать?
Vladislav
именно update
Vladislav
или insert?
Vladislav
короче, batchInsert можно сделать
Vladislav
но если тебе недо нсколько моделей существующих перезаписчывать
Vladislav
то только цикл
Borys
insert
Vladislav
тогда bathcInsert гугли
Vladislav
http://www.yiiframework.com/doc-2.0/yii-db-command.html#batchInsert()-detail
Vladislav
вот
Vladislav
но тут нет валидации
Vladislav
можешь заранее пронать по циклу $model->validate()