-
Notifications
You must be signed in to change notification settings - Fork 29
Description
Привет. Буквально на первых парах нашел баг. Описываю кейс:
В базе есть категории с ID: 1, 2, 3, 4.
Шаг 1. Присваиваем категории
$game = Post::model()->findByPk(2);
$game->categories= array(2, PostCategories::model()->findByPk(3));
$game->save()
У нас получается
$game->categories = array(2, 3); //Все ок, в базе все сохранилось хорошо
Шаг 2. Теперь присваеваем несуществующую категорию (да да, несуществующую, данным же нельзя доверять):
$game = Post::model()->findByPk(2);
$game->categories= array(2, PostCategories::model()->findByPk(5));
$game->save()
И вот тут нас получается
$game->categories = array(2, null);
А в базе получится:
id | post_id | category_id
1 | 2 | 2
2 | 2 | 3
3 | 2 | 0
Теперь если каждый раз повторять шаг 2, То будет появляться новая запись с category_id = 0
Шаг 3. Если присвоит такие категории:
$game->categories= array(1, PostCategories::model()->findByPk(5));
То в базе будет:
А в базе получится:
id | post_id | category_id
1 | 2 | 2
2 | 2 | 3
3 | 2 | 0
3 | 2 | 1
3 | 2 | 0
Как видно, старые связи не удалились.
=== Решение ===
Для
$pks[]=is_object($record) ? $record->getPrimaryKey() : $record;
Добавить проверку:
if ($record !== null)
и хорошо бы добавить
return array_unique($pks);