It's helpful if you include a whole reproducible example with your question so that people can see which packages and functions you are using, and how you are using the functions.
It appears the difference is just in the different ways to calculate odds ratio available in the different functions.
If you use the "wald" method with the oddsratio() function, the results will agree with a simple calculation of dividing the ratio of the frequencies in the table. So, the following methods all yield the same results.
Input =("
Feeding Disease1 Disease0
zero-pasture 46 192
zero-graze 317 1212
pasture 38 266
")
Matrix = as.matrix(read.table(textConnection(Input), header=TRUE, row.names=1))
library(epitools)
oddsratio(Matrix, method="wald")$measure
NA
odds ratio with 95% C.I. estimate lower upper
zero-pasture 1.0000000 NA NA
zero-graze 0.9160095 0.6489433 1.292984
pasture 1.6770833 1.0502500 2.678037
(1212/317) / (192/46)
0.9160095
(266/38) / (192/46)
1.677083
epitab(Matrix)$tab
oddsratio lower upper
zero-pasture 1.0000000 NA NA
zero-graze 0.9160095 0.6489433 1.292984
pasture 1.6770833 1.0502500 2.678037
?fisher.test. – Michael M Jun 07 '23 at 21:18