при такой выборе я получаю только уникальные строки в БД с полями sender_id и recipient_id, но там ведь есть еще другие поля.
Distinct не возвращает уникальные СТРОКИ, он возвращает уникальные ЗНАЧЕНИЕ указанных столбцов, в Вашем случае - уникальные сочетания значений sender_id и recipient_id.
И вообще таких парных строк может быть неограниченное количество. Так вот, можно ли как то задать distinct таким образом, чтобы такие парные строки считались за одну?
Вы бы лучше описали какую задачу хотите решить и какая структура БД, а то складывается ощущение что Вы вообще не с того краю подходите к ее решению. Вы пытаетесь вывести список собеседников пользователя? или что?
UPD по результатам обсуждения: Вашу задачу можно решить в самом простом варианте так:
$expression = new \yii\db\Expression('id IN (SELECT MAX(id) FROM messages WHERE `sender_id` = :user_id OR `recipient_id` = :user_id, GROUP BY IF (`sender_id` = :user_id, `recipient_id`, `sender_id`))',[':user_id' => 3]);
$models = Messages::find()->where($expression);
Но вообще я думаю имеет смысл создать отдельную таблицу, хранящую информацию о диалогах