Если график направлен, вам нужно будет только проверить родительские узлы (перемещаться вверх, пока не достигнете корня) узла, где должно начинаться новое ребро. Если один из родительских узлов равен концу ребра, добавление края создаст цикл.
Должен быть один unassignedBigInteger, а затем вы устанавливаете свой внешний ключ.
https://laravel.com/docs/5.8/migrations#foreign-key-constraints Пожалуйста, проверьте официальную документацию
Кроме того,
Пожалуйста, будьте осторожны с порядком миграции. Он начинается с первого файла до самого последнего, поэтому, если вы пытаетесь установить внешний ключ для таблицы, которая еще не создана, он выдаст ошибку.
Например,
Таблица пользователей имеет отношение внешнего ключа к статьям и тому подобное:
Schema::table('articles', function(Blueprint $table)
{
$table->foreign('user_id')
->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
});