Joins will definitely work but it will be very inefficient if you do not cache your query... Now try this-
$options['joins'] = array(
array(
'table' => 'role_members',
'alias' => 'RoleMember',
'type' => 'INNER',
'conditions' => array(
'RoleMember.user_id = User.id'
)
),
array(
'table' => 'roles',
'alias' => 'Role',
'type' => 'INNER',
'conditions' => array(
'RoleMember.role_id = Role.id'
)
)
); // here we join all the tables, so all fields are available to place conditions...
$options['conditions'] = array(
'OR' => array(
'User.full_name LIKE ' => $search_term,
'User.email LIKE ' => $search_term,
'User.username LIKE ' => $search_term
'Role.name LIKE ' => $search_term,
)
);
$users = $this->User->find('all', $options);