Как получить последний вставленный идентификатор из базы данных и отправить его компоненту? - PullRequest
0 голосов
/ 02 мая 2019

Я хочу получить последний идентификатор из базы данных при получении API,

проблема в таблице MaterialUnit materialID показывает 0

console.log отлично работает на сервере отлично работает!

вот сервер.js

app.get('/AddProducts', function (req, res) {
    const { materialName, description, categoryID, manufactureID, currencyID} = req.query;
    const INSERT_MATERIAL = `INSERT INTO material (materialName, description, categoryID, manufactureID, currencyID) VALUES 
                                ('${materialName}','${description}','${categoryID}','${manufactureID}','${currencyID}')`;
    connection.query(INSERT_MATERIAL, (error, result) => {
        if(error) {
            return res.send(error)
        }
        else {
            console.log(result.insertId);
            return res.json({id: result.insertId})
        }
    });
});

app.get('/AddMaterialUnits', function (req, res) {
    const { materialID, unitID, def, rate, price, vat, bar} = req.query;
    const INSERT_MATERIAL = `INSERT INTO materialunit (materialID, unitID, barcodeNo, salePrice, vatValue, isdefault, rate) VALUES 
                                ('${materialID}','${unitID}','${bar}','${price}','${vat}','${def}' ,'${rate}')`;
    connection.query(INSERT_MATERIAL, (error, result) => {
        if(error) {
            return res.send(error)
        }
        else {
            return res.send(result)
        }
    });
});

и затем в компоненте:

 AddProduct() {
        let url1 = `http://localhost:3000/AddProducts?materialName=${this.state.name}&description=${this.state.description}&categoryID=${this.state.catID}&manufactureID=${this.state.manID}&currencyID=${this.state.curID}`;
        fetch(url1)
            .catch(error => console.error(error))
            .then(alert("Added successfully"))
            .then((result) => this.setState({materialID: result.id}))
            .then(alert(this.state.materialID));


        this.state.materialUnits.map(obj =>
            fetch(`http://localhost:3000/AddMaterialUnits?materialID=${this.state.materialID}&unitID=${obj.unit.id}&def=${obj.default.value}&rate=${obj.rate}&price=${obj.price}&vat=${obj.vat}&bar=${obj.barcodeNo}`)
                .catch(error => console.error(error))
                .then(alert("Added successfully"))
            )
    }

1 Ответ

1 голос
/ 02 мая 2019

Проблема в том, что id не установлен на AUTO_INCREMENT, это всегда 0.Чтобы это исправить, вам нужно добавить его вручную в оператор SQL, который я не рекомендую.Например, INSERT INTO MATERIAL (id, ...) VALUES(12, ...).

Пусть MySQL сделает инкремент за вас.Измените вашу таблицу и установите для id значение AUTO_INCREMENT, запустив в своем phpmyadmin следующее:

ALTER TABLE `material` ADD INDEX(`id`);
ALTER TABLE `material` MODIFY COLUMN id INT AUTO_INCREMENT

Примечание: вам необходимо очистить таблицу перед выполнением этих запросов.

enter image description here

Если вы получаете ошибки, вам может потребоваться воссоздать таблицу.удалите таблицу и создайте новую, используя следующую.измените длину / значения столбцов по своему вкусу.

CREATE TABLE `material` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `materialName` varchar(500) NOT NULL,
  `categoryID` varchar(500) NOT NULL,
  `description` varchar(500) NOT NULL,
  `manufactureID` varchar(500) NOT NULL,
  `currencyId` varchar(500) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...