SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.03.2022 18:52:46

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Проблема с созданием внешнего ключа (ALTER TABLE table ADD CONSTRAINT)

Работаю с 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) - запрос выполняется успешно. В чем причина такого поведения?

Неактивен

 

#2 27.03.2022 13:38:26

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Проблема с созданием внешнего ключа (ALTER TABLE table ADD CONSTRAINT)

Какая ошибка у Вас возникает в первом запросе? Какая версия MySQL?

Неактивен

 

#3 28.03.2022 12:23:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Проблема с созданием внешнего ключа (ALTER TABLE table ADD CONSTRAINT)

Имя ограничения должно быть уникальным в пределах базы. Скорее всего у вас уже есть ограничение с именем  technology_user_fk.
Если не указывать я явном виде CONSTRAINT имя_ограничения, то база сама сгенерирует уникальное.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson