Простая группировка с помощью min () поможет вам, но в этом случае в списке выбора будут неагрегированные столбцы, которые не позволят выполнить запрос.
Временное решение - отключить mysql only_full_group_by option
.
Однако, не делая этого, я бы сделал длинный шаг, добавив соединение с подзапросом:
$pages = DB::table('teams')
->leftJoin('conversation_teams', 'teams.id', '=', 'conversation_teams.team_id')
->join(DB::raw("(SELECT
MIN(id) as d_id, team_id as t_id
FROM conversation_teams
GROUP BY t_id
) as ct_derived"),function($join){
$join->on("conversation_teams.id","=","ct_derived.d_id");
})
->select('teams.name','conversation_teams.id','conversation_teams.message_body','conversation_teams.sender_user_id','conversation_teams.receiver_user_id','conversation_teams.created_at','conversation_teams.team_id')
->whereIn('conversation_teams.team_id',$my_teams)
->orderBy('conversation_teams.created_at', 'DESC')
->paginate(12);
У меня нет таблицы для запуска запроса, но я пытаюсь сделатьэто я фильтрую результаты conversation_teams
и беру первую запись на команду, что вам и нужно, если я правильно понимаю.