Работаю с Laravel и он посредством доктрины генерирует запрос.
Вот пример модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Kalnoy\Nestedset\NodeTrait;
/**
* App\Models\Technology
*
* @mixin \Eloquent
*/
class Technology extends Model
{
public function migration(Blueprint $table)
{
$table->id();
$table->nestedSet();
$table->unsignedBigInteger('user_id');
$table->string('name')->nullable();
$table->string('slug')->nullable();
$table->text('description')->nullable();
$table->integer('sorting')->default(0);
$table->timestamps();
// Добавление индекса работает
$table->index('user_id', 'technology_user_idx');
// А вот с созданием внешнего ключа начинаются сложности...
// if (Schema::hasTable('users')) {
// $table->foreign('user_id', 'technology_user_fk')
// ->references('id')
// ->on('users');
// }
}
}
На выходе вот всего этого дела есть SQL-запрос для добавления внешнего ключа
ALTER TABLE technologies ADD CONSTRAINT technology_user_fk FOREIGN KEY (user_id) REFERENCES users (id)
Но при попытке выполнить этот запрос вылазит ошибка не возможно добавить ключ.
Стоит только сократить этот запрос убрав CONSTRAINT - до
ALTER TABLE technologies ADD FOREIGN KEY (user_id) REFERENCES users (id) - запрос выполняется успешно. В чем причина такого поведения?