AdonisJs: Почему миграция помечает синтаксическую ошибку рядом с неподписанным, когда другие миграции имеют такой же синтаксис и работают отлично? - PullRequest
0 голосов
/ 12 ноября 2019

Я пытаюсь выполнить несколько миграций для базы данных об автомастерской, и в настоящее время 5 из 7 миграций выполняются без каких-либо ошибок, однако к моменту достижения шестой миграции происходит «ER_PARSE_ERROR», когдаТаблица пытается назначить внешний ключ для родительской таблицы. В этом случае таблица 'hoja_de_partes' имеет столбец с именем 'idMECANICO', а шестая таблица с именем 'repuestos' назначает внешний ключ для столбца в родительской таблице, но когда выполняется процесс, происходит сбой вокруг этой таблицы ион помечает синтаксическую ошибку рядом с «unsigned» в строке 1. Я не знаю, что могло быть причиной такой ошибки, потому что в предыдущей миграции я делал то же самое, и ничего необычного не происходит.

Это родительская таблица

'use strict'

/** @type {import('@adonisjs/lucid/src/Schema')} */
const Schema = use('Schema')

class HojaDeParteSchema extends Schema {
    up() {
        this.create('hoja_de_partes', (table) => {
            table.string('idHOJA', 45).primary()
            table.string('CONCEPTO', 45).notNullable()
            table.integer('CANTIDAD', 11).notNullable()
            table.string('REPARACION', 45).notNullable()              
            table.integer('idMECANICO',
            11).unsigned().references('idMEC').inTable('mecanico_responsables')
            table.timestamps()
           })
        }

   down() {
       this.drop('hoja_de_partes')
   }
}
module.exports = HojaDeParteSchema

Это дочерняя таблица

'use strict'

 /** @type {import('@adonisjs/lucid/src/Schema')} */
 const Schema = use('Schema')

 class RepuestoSchema extends Schema {
    up() {
        this.create('repuestos', (table) => {
             table.increments('idREP', 11).primary()
             table.string('DESCRIPCION', 45).notNullable()
             table.integer('COSTOUNIT', 11).notNullable()
             table.integer('PRECIOUNIT', 11).notNullable()
             table.integer('IMP_PARCIAL', 11).notNullable()
             table.string('idHOJADEPARTE', 
             45).unsigned().references('idHOJA').inTable('hoja_de_partes')
             table.integer('idMECANICODEPARTE', 
             11).unsigned().references('idMECANICO').inTable('hoja_de_partes')
             table.timestamps()
         })
     }

     down() {
         this.drop('repuestos')
    }
 }

module.exports = RepuestoSchema

ЭТО ... ошибкатерминал помечает, как я уже сказал, я не знаю, что делает эту ошибку

code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage:
   'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server 
    version for the right syntax to use near \'unsigned, `idMECANICODEPARTE` int(11) unsigned, 
    `created_at` datetime, `updated_\' at line 1',
    sqlState: '42000',
    index: 0,
    sql:
        'create table `repuestos` (`idREP` int unsigned not null auto_increment primary key, 
        `DESCRIPCION` varchar(45) not null, `COSTOUNIT` int(11) not null, `PRECIOUNIT` int(11) not 
         null, `IMP_PARCIAL` int(11) not null, `idHOJADEPARTE` varchar(45) unsigned, 
        `idMECANICODEPARTE` int(11) unsigned, `created_at` datetime, `updated_at` datetime)' }

Предыдущие миграции имеют те же ссылки .unsigned (). (column) в своихСинтаксис и все 5 запускаются без проблем, если для родительской таблицы hoja_de_partes ему присвоен внешний ключ, и я не выдал ошибку какого-либо рода.

Буду признателен за любую помощь или руководство, также извините, еслимойотступы плохие, я пытаюсь обойти длину некоторых из этих таблиц.

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Без знака нет varchar, используйте INT. Затем удалите длину в столбцах INT, добавление не имеет смысла, так как всегда 4 bytes.

create table `repuestos` 
(`idREP` int unsigned not null auto_increment primary key
 , `DESCRIPCION` varchar(45) not null
 , `COSTOUNIT` int not null
 , `PRECIOUNIT` int not null
 , `IMP_PARCIAL` int not null
 , `idHOJADEPARTE` int unsigned
 , `idMECANICODEPARTE` int unsigned
 , `created_at` datetime
 , `updated_at` datetime) 
0 голосов
/ 12 ноября 2019

синтаксис без знака, подобный этому.

table.integer('idHOJADEPARTE').unsigned().references('idHOJA').inTable('hoja_de_partes')

строка не допускается, поскольку целое число как беззнаковое представление дополнительной информации knex документы

после этого изменения его работа

...