Yii2 relations NULL Foreign key Как правильно делать CREATE/UPDATE?

При использовании Yii2 и работы с отношениями между таблицами в базе данных, возникает ситуация, когда внешний ключ (foreign key) может быть NULL. Возможны две ситуации: создание новой записи (CREATE) и обновление существующей записи (UPDATE). В обоих случаях, чтобы правильно обработать NULL значение во внешнем ключе, необходимо следовать определенным правилам.

При создании новой записи с NULL значением внешнего ключа, необходимо добавить это значение в массив связанных моделей. Например, если у вас есть модель "User" и модель "Group", и в модели "User" существует поле "group_id" как внешний ключ, то при создании нового пользователя с неизвестной группой, вы можете сделать следующее:

$user = new User();
$user->username = 'John';
$user->group_id = null;

// Добавляем связанную модель в массив
$user->group = new Group();
$user->group->name = 'Unknown';

$user->save();

В этом примере мы создаем нового пользователя, устанавливаем его имя и устанавливаем значение внешнего ключа равным NULL. Затем мы создаем новую связанную модель "Group" и устанавливаем ее имя равным "Unknown". Затем мы сохраняем пользователя в базе данных, и NULL значение внешнего ключа будет корректно обработано.

При обновлении существующей записи и установке значения NULL во внешнем ключе, вы также должны удалить связанную модель из массива связей. Например, если вы хотите обновить пользователя и установить его группу равной NULL, вы можете сделать следующее:

$user = User::findOne($id);

$user->username = 'Bob';
$user->group_id = null;

// Удаляем связанную модель из массива
$user->group = null;

$user->save();

В этом примере мы загружаем существующего пользователя из базы данных, устанавливаем его новое имя и устанавливаем внешний ключ группы равным NULL. Затем мы удаляем связанную модель "Group" из массива связей, установив ее равной NULL. И затем мы сохраняем пользователя в базе данных.

В обоих случаях, при создании новой записи и обновлении существующей записи, Yii2 автоматически обрабатывает значение NULL во внешнем ключе и гарантирует, что связанные модели будут правильно созданы или обновлены.