Как упростить запись в базу?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
DronTat
Сообщения: 11
Зарегистрирован: 2017.12.19, 14:29

Как упростить запись в базу?

Сообщение DronTat »

Добрый день. Не нравиться мне как я все это организовал. Может есть более короткие пути? В общем есть список с машинами, нужно при нажатии поднимать определенную машину в списке. Но мне не нравиться то что получается 4 операции с базой

Код: Выделить всё

$modelTransport = TransportQueueKpp::findOne(['kpp_id' => $id]); 
if ($modelTransport->tr_queue_kpp > 1){ 
	$model = TransportQueueKpp::findOne(['tr_queue_kpp' => $modelTransport->tr_queue_kpp - 1, 'tr_entry' => $modelTransport->tr_entry]); 
	$temp = $model->tr_queue_kpp; 
	$model->tr_queue_kpp = $modelTransport->tr_queue_kpp; 
	$modelTransport->tr_queue_kpp = $temp; 
	$modelTransport->save(); 
	$model->save(); 
}
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Как упростить запись в базу?

Сообщение Alexum »

1) Поисковые методы yii могут и не вернуть объект. Нужно всегда проверять на положительный результат, прежде чем обращаться к свойствам, иначе схлопочите исключение.
2) Используйте транзакции если осуществляете одновременно манипуляции над несколькими зависимыми друг от друга моделями и проверяйте успешность вызова ->save(), иначе любая проблема при записи и рискуете всё поломать.
3) Стоит задуматься над логикой, ибо вы храните длину очереди в поле и на основе этого что-то вычисляете. Надёжность данного метода крайне низкая. Если есть связь между транспортом и очередью, то длина очереди легко подсчитывается. В вашем случае это не какие-то мегавычисления, результат которых следует хранить, count в помощь.
4) Если есть желание уменьшить количество поисковых запросов к БД (однако если запросы лёгкие и по ID, то профит сомнительный), то модели очереди и транспорта можно вытаскивать через joinWith().
Ответить