2013-05-23 44 views
10

Tôi đang sử dụng Sequelize và tôi đang cố gắng lấy ID được chèn cuối cùng trong truy vấn thô.Nhận id được chèn cuối cùng Tiếp theo

truy vấn của tôi là

.query(Sequelize.Utils.format(["insert into MyTable (field1, field2) values (?,?)", val1, val2]) 

Các truy vấn được thực hiện một cách hoàn hảo, nhưng kết quả về sự kiện thành công là rỗng.

Ai đó có thể trợ giúp?

Cảm ơn.


Guys,

sau khi một số nghiên cứu và nỗ lực zillions, tôi hiểu thế nào callee việc đối tượng trong sequelizeJs.

vui lòng sửa lỗi nếu câu trả lời của tôi sai.

đối tượng callee cần cấu trúc

{__factory:{autoIncrementField: 'parameterName'}, parameterName: '' } 

này trong trường hợp này "parameterName" là lĩnh vực mà sẽ lưu trữ các ID mới, sequelize tìm kiếm __factory.autoIncrementField để thiết lập giá trị của id chèn vào cuối vào bất động sản với nó value (giá trị của __factory.autoIncrementField).

như vậy, cuộc gọi của tôi đến phương pháp querys sẽ

.query(sequelize.Utils.format(tempInsert), {__factory:{autoIncrementField: 'parameterName'}, parameterName: '' }, {raw: true}) 

này sẽ dẫn đến đối tượng như thế

{ __factory: { autoIncrementField: 'parameterName' }, parameterName: newInserted_ID } 

cảm ơn vì tất cả, và tôi hy vọng điều này có thể giúp ai đó.

+0

Bạn có quản lý để làm việc này không? Tôi đã gặp vấn đề tương tự –

Trả lời

3

Có câu trả lời của bạn đang hoạt động. Một cách khác sẽ

var Sequelize = require("sequelize") 
var sequelize = new Sequelize('test', 'root', 'root', {dialect: 'mysql'}) 

var Page = sequelize.define('page', { 
    type : {type: Sequelize.STRING(20)}, 
    order : {type: Sequelize.INTEGER, defaultValue: 1} 
},{ 
    timestamps: false, 
    underscored: true 
}) 

Page.__factory = {autoIncrementField: 'id'} 
Page.id = '' 

sequelize.query('INSERT INTO pages SET `type` = ?, `order` = ?, `topic_version_id` = ?', Page, {raw: false}, ['TEXT', 1, 1]).success(function(page) { 
    console.log(page) 
    Page.find(page.id) 
    .success(function(result){ 
     console.log(result) 
    }) 

}) 
+0

Tôi tò mò, bạn đang đặt 'raw: false', nhưng truy vấn của bạn là truy vấn thô. Tôi có thiếu mục đích của thuộc tính 'raw' không? Bạn có thể giải thích tại sao bạn đã làm điều này? – Gavin

+1

cho đến nay tôi nhớ, 'raw: true' sẽ không ánh xạ kết quả thành mô hình. – Kamrul

+1

Điều đó rất hữu ích để biết! Cảm ơn bạn – Gavin

5

Bạn phải bổ sung tài sảnautoincrement trong định nghĩa mô hình.

const Article = sequelize.define('articles', { 
    id: { 
    type: Sequelize.INTEGER, 
    primaryKey: true, 
    autoIncrement: true 
    }, {}, 
    { 
    createdAt: false, 
    updatedAt: false 
    }); 

Sau đó, bạn có thể truy cập id được chèn cuối cùng với thuộc tính theo định nghĩa mô hình.

Article.create(article) 
    .then(result => console.log(result.id)); 
+0

Tôi đã bỏ lỡ điều này.Tôi nghĩ rằng Sequelize sẽ tự động xem xét khóa chính là cột tăng tự động. Cảm ơn. –

Các vấn đề liên quan