It is not vulnerable to SQL injection, because the expression will be passed as a proper parameter to the query by CakePHP. (Thanks @ndm for pointing this out below!)
Note though that using user input in regular expressions is a potential denial of service vulnerability, because it's relatively easy to deliberately create a regexp that will be very slow on anything but small inputs.
In case of the above, it would be a good solution to only allow $id
from a hardcoded set (validate it in php to be from a given list), because protocol_ids
sounds like it has a finite number of possible values.