谈谈我第一次是如何为 Laravel 贡献源码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DavidNineRoc
V2EX    PHP

谈谈我第一次是如何为 Laravel 贡献源码

  •  
  •   DavidNineRoc 2018 年 5 月 28 日 4441 次点击
    这是一个创建于 2889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    起源

    • 办法总比困难多,所以发现问题比解决问题更难得到。
    • 事情的起源是因为在调试一段模型事件时出现的,当时随便往数据库里插入了一段字符串 ID,而不是标准的 uuid。然后发现我的模型事件中查找不到当前 ID 的模型。
    • 当然,我们不可能总是能遇到问题,也有可能遇到了问题是自己的错误,这时候可以去Laravel问题库看一下自己有什么能解决的问题

    进展

    • 先排除了自己本身代码中的错误,然后一步一步调试
    • 打印了一下返回变量,发现belongsToMany::sync方法返回的 ID 并不正确。
    • 进一步查看,这个整数大小,很熟悉,觉得应该是整数类型大小溢出了。然后看了一下源码InteractsWithPivotTable::caseKey
    • 基本确定就是整形数字溢出了,这里只是简单的根据变量类型进行强转,因为 PHP 是弱类型语言,所以当长字符是一个数字字符串时,将导致无法得到正确的结果。
    • 但我在模型中已经设置了主键类型为字符串,这不应该是我想要的结果。
    • 然后我向框架提了一个issues
    • Laravel 的组织成员tillkruss 告诉我可以提交一个 PR
    • 然后自己马上行动起来,说实话解决这个问题很简单,因为只要获取主键类型,然后进行强转即可
    • 马上提交了代码,之后被驳回,原来是忘记了写测试代码
    • 查看了一下其他数据库的测试代码,找了一个比较符合我的写了一个数据库的测试。提交。成功合并。
    • 具体修改的代码,可以查看这里 5.7 Improve the return value of the caseKey method

    结束

    • 第一次为大型项目提交PR,确实感觉到不能这么随意。
    • 写代码的时候请明确解释这段代码的原因,你会发现框架当中很多很多的注释
    • 千万不要忘记写测试文件
    • 当你提交PR的时候,请详细描述你本次做了什么改动,增加了什么新功能。
    • 尽情的表达你的想法,社区有很多人会帮助你的 最后欢迎加入 Laravel 学习交流群,群号:584453488
    15 条回复    2018-06-01 18:13:24 +08:00
    qloog
        1
    qloog  
       2018 年 5 月 28 日
    厉害了,我的哥
    duanzhanling
        2
    duanzhanling  
       2018 年 5 月 28 日
    可以啊,我的哥
    carlclone
        3
    carlclone  
       2018 年 5 月 28 日 via Android
    佩服啊我的弟
    zhangyu911013
        4
    zhangyu911013  
       2018 年 5 月 29 日 via Android
    im using translation software 2333
    DavidNineRoc
        5
    DavidNineRoc  
    OP
       2018 年 5 月 29 日 via Android
    @qloog @duanzhanling @carlclone y 学习使用中发现问题 >_
    @zhangyu911013 这波操作是逃不了了 <_>
    因为前一句话怎么都理解不了他要表达的意思~_~
    WildCat
        6
    WildCat  
       2018 年 5 月 29 日 via iPhone
    羡慕,我目前大部分时间都是给自己提 PR (摊手
    uoddsa
        7
    uoddsa  
       2018 年 5 月 29 日
    牛逼啊我的哥
    2379920898
        8
    2379920898  
       2018 年 5 月 29 日
    干得好。小老弟
    kobe123
        9
    kobe123  
       2018 年 5 月 29 日
    手动点赞
    generation
        10
    generation  
       2018 年 5 月 29 日
    这个转换的意义是什么? 没看明白, 不转不是一样存数据库吗
    encro
        11
    encro  
       2018 年 5 月 29 日
    向 Yii 提交过几次反馈,也都处理很快。
    DavidNineRoc
        12
    DavidNineRoc  
    OP
       2018 年 5 月 29 日
    @WildCat 自己写的 bug,含泪也要修复
    @uoddsa 一起来牛逼
    @2379920898 老大哥带开车吗 >_<
    @kobe123 >_
    @generation 字符串作为主键,如果是长数字字符串,会溢出。导出返回的不正确
    @encro 对的,反应了问题,处理得很快。还是在有时差的时候 >_<
    OMGZui
        13
    OMGZui  
       2018 年 6 月 1 日
    同样是九年义务教育,你为何这么优秀
    cncqw
        14
    cncqw  
       2018 年 6 月 1 日
    手动赞一个
    cncqw
        15
    cncqw  
       2018 年 6 月 1 日
    不过楼主这个需求太小众,用字符串当主键基本很少,laravel 还是很严谨的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2739 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 06:03 PVG 14:03 LAX 23:03 JFK 02:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86