Допустим, имеется две таблицы — одна завязана на другую внешними ключами (foreign keys), и для того, чтобы создать запись в одной из таблиц, нужно ввести валидный ключ другой. Но в другой такого ключа нет, по понятным причинам - потому что, чтобы его создать, надо создать необходимый внешний ключ в первой. И так до бесконечности.

Laravel ругается и не позволяет создавать записи в таблицах при отсутствии правильного внешнего ключа, и это понятно. Также ругаются другие программы для работы с БД. И я в замешательстве.
Update: Видимо да, где-то есть лишняя связь и я не до конца понял принцип. Вот такую модель для Ларавела я придумал:

А вот так, видимо криво, реализовал в миграциях создание связей для таблиц (postals - таблица с данными об адресе заказа, они привязываются исключительно к product1s и product2s при их заказе):
Schema::table('payments', function ($table) {
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('product1_id')->references('id')->on('product1s');
$table->foreign('product2_id')->references('id')->on('product2s');
});
Schema::table('product1s', function ($table) {
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('postal_id')->references('id')->on('postals');
$table->foreign('payment_id')->references('id')->on('payments');
});
Schema::table('product2s', function ($table) {
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('postal_id')->references('id')->on('postals');
$table->foreign('payment_id')->references('id')->on('payments');
});
Schema::table('postals', function ($table) {
$table->foreign('product1_id')->references('id')->on('product1s');
$table->foreign('product2_id')->references('id')->on('product2s');
});