Как правильно сформулировать запрос mysql где нужно много AND?
Правильно не работает. Вы ищете сообщения которые одновременно были отправлены в обе стороны. А надо искать те, которые было от врача пациенту плюс те, которые были от пациента врачу.SELECT *
  FROM `messages` 
  WHERE `id_add` = :doctorId AND `id_to` = :patientId 
UNION SELECT *
  FROM `messages` 
  WHERE `id_add_pac` = :patientId AND `id_to_pac` = :doctorId
$result = MessagesModel::find()
 ->andWhere([`id_add` => 73])
 ->andWhere([`id_to` => 68])
 ->andWhere([`id_add_pac` => 68])
и т.д.
решение в лоб.