huahua132 / skynet_fly

基于云风的skynet,搭建开箱即用的微服务框架,提供优雅的服务热更新
https://huahua132.github.io/2023/02/25/skynet_fly_word/word_1/A_home/
MIT License
448 stars 78 forks source link

orm的demo报错 #27

Closed padoruuu closed 3 months ago

padoruuu commented 3 months ago

人比较菜,想边学习边搭建个小网站练手,目前遇到的报错如下: 如果单个创建的有冲突就报错了 local ret = client:create_one_entry({player_id = 10005})

[:0000000f][20240630 16:32:42 76]lua call [e to :f : 40 msgsz = 94] error : ../../skynet/lualib/skynet.lua:987: ../../skynet/lualib/skynet.lua:452: ../../skynet/lualib/skynet/queue.lua:20: ../../skynet/lualib/skynet/queue.lua:20: ../../lualib/skynet-fly/db/ormadapter/ormadapter_mysql.lua:375: _insert_one err insert into t_player (player_id,nickname,sex,status) value(10005,0,0,0) stack traceback: [C]: in function 'error' ../../lualib/skynet-fly/db/ormadapter/ormadapter_mysql.lua:375: in function <../../lualib/skynet-fly/db/ormadapter/ormadapter_mysql.lua:369> (...tail calls...) ../../lualib/skynet-fly/db/orm/ormtable.lua:593: in function <../../lualib/skynet-fly/db/orm/ormtable.lua:588> [C]: in function 'xpcall' ../../skynet/lualib/skynet/queue.lua:34: in function <../../skynet/lualib/skynet/queue.lua:24> (...tail calls...) ../../module/orm_table_m.lua:34: in function <../../module/orm_table_m.lua:33> [C]: in function 'xpcall' ../../skynet/lualib/skynet/queue.lua:34: in upvalue 'queue' ../../module/orm_table_m.lua:173: in function 'orm_table_m.call' ../../lualib/skynet-fly/utils/skynet_util.lua:39: in upvalue 'f' ../../skynet/lualib/skynet.lua:402: in function <../../skynet/lualib/skynet.lua:374> stack traceback: [C]: in function 'assert' ../../skynet/lualib/skynet/queue.lua:20: in function <../../skynet/lualib/skynet/queue.lua:12> (...tail calls...) ../../module/orm_table_m.lua:34: in function <../../module/orm_table_m.lua:33> [C]: in function 'xpcall' ../../skynet/lualib/skynet/queue.lua:34: in upvalue 'queue' ../../module/orm_table_m.lua:173: in function 'orm_table_m.call' ../../lualib/skynet-fly/utils/skynet_util.lua:39: in upvalue 'f' ../../skynet/lualib/skynet.lua:402: in function <../../skynet/lualib/skynet.lua:374> stack traceback: [C]: in function 'assert' ../../skynet/lualib/skynet/queue.lua:20: in function <../../skynet/lualib/skynet/queue.lua:12> (...tail calls...) ../../module/orm_table_m.lua:173: in function 'orm_table_m.call' ../../lualib/skynet-fly/utils/skynet_util.lua:39: in upvalue 'f' ../../skynet/lualib/skynet.lua:402: in function <../../skynet/lualib/skynet.lua:374> stack traceback: [C]: in function 'assert' ../../skynet/lualib/skynet.lua:987: in function 'skynet.dispatch_message' [:00000010][20240630 16:32:42 76]lua call [f to :10 : 24 msgsz = 0] error : ../../skynet/lualib/skynet.lua:987: ../../skynet/lualib/skynet.lua:452: ../../skynet/lualib/skynet.lua:719: call failed stack traceback: [C]: in function 'error' ../../skynet/lualib/skynet.lua:719: in upvalue 'yield_call' ../../skynet/lualib/skynet.lua:736: in function 'skynet.call' (...tail calls...) ../../lualib/skynet-fly/client/orm_table_client.lua:21: in method 'create_one_entry' ./module/test_m.lua:34: in upvalue 'f' ../../skynet/lualib/skynet.lua:375: in function <../../skynet/lualib/skynet.lua:374> stack traceback: [C]: in function 'assert' ../../skynet/lualib/skynet.lua:987: in function 'skynet.dispatch_message'

huahua132 commented 3 months ago

主键冲突创建失败,属于预期内的错误抛出

huahua132 commented 3 months ago
-- 不存在就创建
function handle.not_exist_create(entry_data)
    local player_id = assert(entry_data.player_id)
    local entry = g_orm_obj:get_one_entry(player_id)
    if entry then
        return
    end

    entry = g_orm_obj:create_one_entry(entry_data)
    if not entry then return end

    return entry:get_entry_data()
end

你可以实现以上handle处理函数,用来避免创建主键冲突的数据