Если вы явно вызываете имена таблиц для указания их столбцов, разве это не должно быть одинаковым в предложении ON ? в вашем коде это так
$this->data['latestSubscriptions'] = GymPurchase::select('first_name', 'last_name', 'gym_client_purchases.*')
//client_id here isn't specified
->leftJoin('gym_clients', 'gym_clients.id', '=', 'client_id')
->groupBy('gym_client_purchases.client_id')
->orderBy('gym_client_purchases.purchase_date', 'desc')
->get();
Это должно быть так:
$this->data['latestSubscriptions'] = GymPurchase::select('first_name', 'last_name', 'gym_client_purchases.*')
->leftJoin('gym_clients', 'gym_clients.id', '=', 'gym_client_purchases.client_id')
->groupBy('gym_client_purchases.client_id')
->orderBy('gym_client_purchases.purchase_date', 'desc')
->get();
Я проверил ваш код, он должен работать должным образом из-за убывания порядка, я думаю, просто небольшая опечатка в ваших фрагментах кода