#php #sql #laravel
#php #sql #laravel
Вопрос:
У меня есть таблица bankaccounts. Там у меня есть столбец ‘user_id’, который ссылается на идентификатор в таблице user.
Теперь я хочу добавить внешний ключ в этот столбец, но затем я получаю эту ошибку.
> SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который следует использовать рядом с ‘unsigned not null,
created_at
timestamp null,updated_at
timestamp null) def’ в строке 1 (SQL: create tablebankaccounts
(id
bigint unsigned not null auto_increment primary key,user_id
int unsigned not null,accountnumber
varchar(191) not null ,bank
varchar(191) not null,user_name
varchar(191) без знака not null,created_at
отметка времени null,updated_at
отметка времени null) набор символов по умолчанию utf8mb4 сопоставляет ‘utf8mb4_unicode_ci’)
Я уже пробовал это с минимальными изменениями. Добавляйте внешний ключ только в столбец user_id.
У меня стандартная миграция пользователей Laravel, а это миграция банковских счетов.
public function up()
{
Schema::create('bankaccounts', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('user_id')->unsigned();
$table->string('accountnumber')->unique();
$table->string('bank');
$table->string('user_name');
$table->timestamps();
});
Schema::table('bankaccounts', function($table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('user_name')->references('name')->on('users')->onDelete('cascade');
});
}
Я понятия не имею, что я делаю не так, потому что я вижу онлайн-руководства, которые также пробуют это с идентификатором из таблицы users, и они преуспевают.
Ответ №1:
У вас не может быть «неподписанного» varchar.
У вас есть
user_name varchar(191) unsigned not null
измените его на
user_name varchar(191) not null
Комментарии:
1. При миграции laravel это вызвано
$table->string('user_name')->unsigned();
2. Технически, поскольку это Laravel, OP необходимо изменить
$table->string('user_name')->unsigned();
на$table->string('user_name');
.3. Я отредактировал свой пост. Даже без имени это все равно не будет работать. Теперь я получаю эту ошибку: Общая ошибка: 1215 не удается добавить ограничение внешнего ключа (SQL: alter table
bankaccounts
добавляет ограничениеbankaccounts_user_id_foreign
ссылок на внешний ключ (user_id
)users
(id
) при каскадном удалении)4. @idontunderstandarrays Это другая проблема, и ее следует задать в другом вопросе.
5. @EdCottrell Хорошо, я изменил его в соответствии с вашим предложением, удалил внешний ключ для идентификатора пользователя, и я также получаю ту же ошибку.