Я загружаю данные и сохраняю их в двух таблицах: table_1 и table_2, эти таблицы имеют отношение один ко многим:
Я не могу контролировать, какая таблица будет получать первую вставку. Например, если я получаю данные в table_2, некоторые записи все еще не существуют в таблице_1. Затем я получаю сообщение об ошибке
SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется
В таблице_2 я установил значение по умолчанию для таблицы_1_id NULL, но все равно не удалось.
Возможно ли установить значение NULL table_1_id, если оно не соответствует ни одной строке в таблице_1?
Я использую Laravel 5.5 с MySQL
Да, это возможно.
Когда SQL не удается выполнить вставку из-за некоторой ошибки, она правильно выбрасывает соответствующие исключения, как и в соединениях.NET Entity Framework, она выдает некоторые реализации SQLException. Таким образом, если вы хотите вставить нуль, если вставка не удалась из-за ограничения FK, вы можете поймать соответствующее исключение, созданное SQL с именем ограничения, а затем сделать необходимое.
В вашем случае создайте ограничение с именем. И в коде, когда вставка терпит неудачу, попробуйте поймать исключение и увидеть имя. Затем попробуйте изменить запись, заменив ее нулем и снова попробуйте вставить и увидите, как она вставлена.
Независимо от технологии, которую вы могли бы использовать, будет использоваться обработка excection SQL.