У меня возникли проблемы с попыткой изменить тип столбца в laravel, чтобы он соответствовал ему как совместимый столбец, чтобы быть внешним ключом, ссылающимся на поля идентификатора другой таблицы.
У меня есть такая схема:
Schema::create('person_organization', function(Blueprint $table){
...
$table->integer('organization_id');
...
});
и я хочу изменить поле organization_id на беззнаковый тип, что позволит использовать его как внешний ключ, ссылающийся на поле id в таблице organizations.
ПРИМЕЧАНИЕ: Простое изменение типа поля при создании таблицы недоступно, потому что система работает в производственном режиме.
Поэтому нам нужно выполнить новую миграцию, чтобы внести эти изменения.
ЗАМЕТКА 2: Я попробовал метод change, как описано в документы laravel, но он застрял в ошибке запроса, как показано ниже:
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') on delete cascade' at line 1 (SQL: alter table
person_organizationadd constraintperson_organization_person_id_foreignforeign key (person_id) referencespersons() on delete cascade)
@lagbox опубликовать ошибку запроса
@iagbox Я обновил вопрос с ошибкой запроса.
вы можете опубликовать код, который вы пробовали?
Schema::table('person_organization', function (Blueprint $table) { // Organization $table->integer('organization_id')->unsigned()->change(); $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade'); // Person $table->integer('person_id')->unsigned()->change(); $table->foreign('person_id')->referenes('id')->on('persons')->onDelete('cascade'); }); @AlexandreThebaldi
почему вы меняете таблицу domain_organization? вы не изменяете таблицу лиц?
Это таблица отношений "многие ко многим". @ Салман-Зафар. но это не имеет значения, потому что ошибка связана не с таблицей, а с ошибкой запроса laravel во время запроса.
попробуйте следующее: Schema :: table ('person', function (Blueprint $ table) {$ table-> integer ('organization_id') -> unsigned () -> index () -> cha nge (); $ table- > внешний ('идентификатор_организации') -> ссылки ('идентификатор') -> на ('организации') -> onDel ete ('каскад');});
@SalmanZafar, я попробую выложить здесь результат.
@ThauanCSantos хорошо, конечно
@SalmanZafar работал на меня. Можете ли вы опубликовать свой ответ как ответ ниже, чтобы я мог оценить его как правильный ответ.
@ThauanCSantos опубликовал мой ответ






Из документов Laravel 5.6:
Before modifying a column, be sure to add the doctrine/dbal dependency to your composer.json file.
composer require doctrine/dbal
Затем создайте миграцию:
php artisan make:migration add_organization_foreign_to_persons_table --table=persons
А также:
Schema::table('persons', function (Blueprint $table) {
$table->unsignedInteger('organization_id')->change();
$table->foreign('organization_id')->references('id')->on('organizations');
});
У меня только что установлен docrtine/dbal. Я обновил вопрос, показывающий ошибку. @Alexandre Thebaldi
$table->integer('organization_id')->unsigned();
$table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade');
Учитывая, что вы уже установили пакет доктрина / dbal в своем приложении
Теперь создайте перенос php artisan make:migration your_migration_name, а затем при переносе вставьте приведенный ниже код.
Schema::table('persons', function(Blueprint $table) {
$table->integer('organization_id')->unsigned()->index()->change();
$table->foreign('organization_id')->references('id')->on('organizations')-
>onDelete('cascade');
})
Теперь запустите команду php artisan migrate, и теперь все готово.
Удачного кодирования ...
«Я попробовал изменить метод, как описано в документации по laravel, но возникла ошибка запроса». какая ошибка?