DFS and BFS both detects cycle in directed and undirerected graphs in $O(V+E)$.
The reason for using DFS is that it is easier to implement using stack. With much efficient memory utilization, we can backtrack to find if a node has been visited more than once. Stack will contain the nodes forming cycle. With BFS, each vertex needs to be extracted from the queue if we want to print the cycle.