gf
gf copied to clipboard
duplicated sql using With feature of Model
使用gf关联查询:
2023-02-26 10:14:16.933 [DEBU] {20e7a783173e47173cce3c56c83b74a2} djing_ [ 1 ms] [default] [djing] [rows:4 ] SELECT `id`,`user_id`,`subject`,`order_no`,`pay_no`,`pay_type`,`pay_time`,`total_price`,`status`,`remark`,`create_at`,`update_at` FROM `djing_order` WHERE `user_id`=2
2023-02-26 10:14:16.935 [DEBU] {f0cfc183173e47173dce3c5602f873b4} djing_ [ 1 ms] [default] [djing] [rows:1 ] SELECT `id`,`nickname`,`desc`,`head`,`sex` FROM `djing_user` WHERE `id` IN(2)
2023-02-26 10:14:16.936 [DEBU] {60e6d683173e47173ece3c5662995f5a} djing_ [ 1 ms] [default] [djing] [rows:4 ] SELECT `id`,`order_id`,`actor_id`,`status`,`planned_start_time`,`planned_end_time`,`start_time`,`end_time`,`type`,`hours`,`session_price`,`hourly_price`,`total_price`,`coupon_id`,`discount_amount` FROM `djing_actor_order` WHERE `order_id` IN(27,28,29,30)
2023-02-26 10:14:16.937 [DEBU] {e87beb83173e47173fce3c568a258176} djing_ [ 0 ms] [default] [djing] [rows:1 ] SELECT `id`,`nickname`,`head`,`desc`,`sex`,`main_image`,`images`,`videos`,`session_price`,`hourly_price`,`score`,`ordered_count` FROM `djing_actor` WHERE `id`=2 LIMIT 1
2023-02-26 10:14:16.938 [DEBU] {40d2f683173e471740ce3c56871905da} djing_ [ 1 ms] [default] [djing] [rows:1 ] SELECT `id`,`nickname`,`head`,`desc`,`sex`,`main_image`,`images`,`videos`,`session_price`,`hourly_price`,`score`,`ordered_count` FROM `djing_actor` WHERE `id`=2 LIMIT 1
2023-02-26 10:14:16.940 [DEBU] {880d0084173e471741ce3c56f4316a8a} djing_ [ 2 ms] [default] [djing] [rows:1 ] SELECT `id`,`nickname`,`head`,`desc`,`sex`,`main_image`,`images`,`videos`,`session_price`,`hourly_price`,`score`,`ordered_count` FROM `djing_actor` WHERE `id`=2 LIMIT 1
2023-02-26 10:14:16.944 [DEBU] {28982a84173e471742ce3c563dbc1a97} djing_ [ 3 ms] [default] [djing] [rows:1 ] SELECT `id`,`nickname`,`head`,`desc`,`sex`,`main_image`,`images`,`videos`,`session_price`,`hourly_price`,`score`,`ordered_count` FROM `djing_actor` WHERE `id`=2 LIMIT 1
2023-02-26 10:14:16.948 [DEBU] {489c6084173e471743ce3c56c6cfb960} djing_ [ 4 ms] [default] [djing] [rows:0 ] SELECT `id`,`order_id`,`place_id`,`status`,`appointment_time`,`write_off_time` FROM `djing_place_order` WHERE `order_id` IN(27,28,29,30)
使用gorm关联查询:
[0.670ms] [rows:1] SELECT * FROM `djing_actor` WHERE `djing_actor`.`id` = 2
[3.553ms] [rows:4] SELECT * FROM `djing_actor_order` WHERE `djing_actor_order`.`order_id` IN (27,28,29,30)
[0.224ms] [rows:0] SELECT * FROM `djing_place_order` WHERE `djing_place_order`.`order_id` IN (27,28,29,30)
[5.021ms] [rows:4] SELECT * FROM `djing_order` WHERE `djing_order`.`user_id` = 2 LIMIT 10
由 SELECT * FROM djing_actor WHERE djing_actor.id = 2 这条语句可以看出,gorm仅查询了一次,gf查询了四次。gorm对于scan到数组时,不会直接对数组进行循环继续关联查询,而是会将数组里的元素的关联字段提取出来去重之后再进行查询。
@StrangeYear 嗯,这块应该是可以改进的,请提供两者不同的使用方式代码。以便于单测编写。
Hello @StrangeYear. We like your proposal/feedback and would appreciate a contribution via a Pull Request by you or another community member. We thank you in advance for your contribution and are looking forward to reviewing it! 你好 @StrangeYear。我们喜欢您的提案/反馈,并希望您或其他社区成员通过拉取请求做出贡献。我们提前感谢您的贡献,并期待对其进行审查。