#php #laravel #migration
#php #laravel #миграция
Вопрос:
Я выполнял миграции для своей базы данных в Laravel, но эта ошибка продолжает появляться. Я думал, что исправил это, но нет. Ошибка гласит:
SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1171 Все части ПЕРВИЧНОГО КЛЮЧА должны быть НЕ НУЛЕВЫМИ; если вам нужно значение NULL в ключе, используйте UNIQUE вместо этого
SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1171 Все части ПЕРВИЧНОГО КЛЮЧА должны быть НЕ нулевыми; если вам нужно значение NULL в ключе, используйте UNIQUE вместо этого (SQL: создайте
таблицу e articulos
( id
bigint без знака не null, descuento_id
bigint без знака не null, unidad_medida
varchar(40) не null, categoria
varchar(50) nul
l, nombre
varchar(100) не null, codigo_comercial
varchar(50) null, codigo_interno
varchar(35) null, tipo
перечисление (‘interno’, ‘externo’) не null по умолчанию
‘externo’, marca
varchar(50) null, existencia
double(8, 2) не null по умолчанию ‘0’, status
перечисление(‘activo’, ‘suspendido’) не null по умолчанию ‘activo’, stock
tinyint null автоматически увеличивает первичный ключ, descripcion
текст null, max
int null, min
int null, codigo_producto_sat
varchar(255) null, codigo_unidad_sat
тип varchar(255) значение null, subcategoria
имя varchar(50) null, то subsubcategoria
имя varchar(50) null, то modelo
имя varchar(255) null, то presentaciones
значение null в JSON, imagen
varc
Хар(255) null, в impuestos_compra
формате JSON не нуль, impuestos_venta
не равен NULL в JSON, validar_peso
перечисление(‘си’: ‘нет’) не null по умолчанию «нет», deleted_at
timestam
Р нуль, created_at
нуль метку, updated_at
метку времени, значение null) набор символов по умолчанию utf8mb4 предложение COLLATE ‘utf8mb4_unicode_ci’)
Мой файл миграции:
Schema::create('articulos', function (Blueprint $table) {
$table->unsignedBigInteger('id');
$table->unsignedBigInteger('descuento_id');
$table->string('categoria' , 50)->nullable();
$table->string('nombre' , 100);
$table->string('codigo_comercial' , 50)->unique()->nullable();
$table->string('codigo_interno' , 35)->nullable();
$table->enum('tipo' , ['interno' , 'externo'])->default('externo');
$table->string('marca' , 50)->nullable();
$table->double('existencia' , 8 , 2)->default('0');
$table->enum('status' , ['activo' , 'suspendido'])->default('activo');
$table->tinyInteger('stock' , 1)->nullable();
$table->text('descripcion')->nullable();
$table->integer('max')->nullable();
$table->integer('min')->nullable();
$table->string('unidad_medida' , 40);
$table->string('codigo_producto_sat' , 255)->nullable();
$table->string('codigo_unidad_sat' , 255)->nullable();
$table->string('subcategoria' , 50)->nullable();
$table->string('subsubcategoria', 50)->nullable();
$table->string('modelo' , 255)->nullable();
$table->json('presentaciones')->nullable();
$table->string('imagen' , 255)->nullable();
$table->json('impuestos_compra');
$table->json('impuestos_venta');
$table->enum('validar_peso' , ['si' , 'no'])->default('no');
$table->softDeletes();
$table->timestamps();
Спасибо, что помогли мне!
Ответ №1:
Если я чего-то не упускаю, я не вижу в этой миграции ничего, что явно устанавливало бы первичный ключ. Я бы рекомендовал использовать $table->bigIncrements('id');
вместо $table->unsignedBigInteger('id');
для этого, это может решить вашу проблему, но я не уверен на 100%. Есть ли еще какая-либо информация в ошибке, которая показывает, что sql генерируется при миграции? Это бы очень помогло!
Комментарии:
1. Привет! Я только что добавил сообщение о запросе, отображаемое в ошибке.
2. или просто
$table->id();
.$table->bigIncrements('id');
является псевдонимом$table->id()
Ответ №2:
Я только что исправил это. TinyInt не должен быть обнуляемым:
$table->tinyInteger('stock' , 1)->nullable();
Вместо этого я должен ввести следующее:
$table->tinyInteger('stock' , 1);
Спасибо.
Комментарии:
1. так
stock
ваше поле автоматического увеличения, неid
? вторым аргументом для целочисленных полей является abool
и это дляautoincrement
… не уверен, почему вы не сделали быid
автоматическое увеличение поля, поскольку это идентификатор (следовательно, ‘id’)