Как успешно добавить ограничение внешнего ключа в таблицу базы данных в laravel с помощью eloquent? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть база данных, содержащая две таблицы (студенты, платежи) с id в качестве первичного ключа и другим столбцом studentID в таблице студентов . Я делаю studentID внешний ключ в платежах.

Я получаю это сообщение об ошибке:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1072 Ключевого столбца 'studentID' в таблице не существует (SQL: изменить таблицу payments добавить ограничение payments_studentid_foreign ссылки на внешние ключи (studentID) students (id))

StudentID существует в обоих столбцах, что может быть возможным решением это. ниже то, что я сделал

стол студентов

 public function up()
    {
        Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('studentID');
            $table->string('Programme');
            $table->string('cLevel');
            $table->string('image')->nullable();
            $table->string('surName');
        });
    }

стол платежей

public function up()
    {
        Schema::create('payments', function (Blueprint $table) {
            $table->id();
            $table->foreign('studentID')->references('id')->on('students');
            $table->string('feeType');
            $table->string('Year');
            $table->double('amount', 15,3);
            $table->string('paidBy');
            $table->timestamps();
        });
    }

Ответы [ 3 ]

2 голосов
/ 21 апреля 2020

В настоящее время вы добавляете идентификатор ученика 2 раза в таблицу учеников.

$table->id(); - это помощник, который создает столбец «Беззнаковое большое целое» с автоматически увеличивающимся идентификатором

И так далее в таблице ваших студентов удалите эту строку:

$table->bigInteger('studentID');

В таблице платежей вы должны добавить новый столбец с идентификатором и внешним ключом. Обратите внимание, что очень важно иметь тот же тип для внешнего ключа, что и в исходной таблице, поэтому в этом случае большое целое число без знака:

$table->unsignedBigInteger('studentID');
$table->foreign('studentID')->references('id')->on('students');

PS: поскольку вы новичок, вы должны попытаться следовать Laravel соглашений для вашего именования. Это поможет связать отношения в вашем коде.

Соглашение будет заключаться в переименовании studentID в student_id

2 голосов
/ 21 апреля 2020

Сначала добавьте foreign_key, затем используйте references

$table->bigInteger('studentID')->unsigned();
$table->foreign('studentID')->references('id')->on('students');

Надеюсь, что это может решить вашу проблему

0 голосов
/ 21 апреля 2020
public function up()
    {
        Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('Programme');
            $table->string('cLevel');
            $table->string('image')->nullable();
            $table->string('surName');
        });
    }

public function up()
    {
        Schema::create('payments', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('studentID')->unsigned();
            $table->foreign('studentID')->references('id')->on('students');
            $table->string('feeType');
            $table->string('Year');
            $table->double('amount', 15,3);
            $table->string('paidBy');
            $table->timestamps();
        });
    }

Вы должны создать studentId в таблице, в которой вы создаете внешний ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...