Вопрос с Foreach, как получить переменную?
Ну ты умник :) Ты значение переменной $users перезаписываешь с каждой итерацией цикла. Объяви эту переменную как массив и вместо перезаписи добавляй значения в конец. Вот так:
$id = $this->database->all("customs");     //тут получаем все значения из таблицы
$key_all = array_column($id, 'user_id');     //из полученных значений вытаскиваем ключи
$keys = array_unique($key_all);     //убираем ключи с дублирующими значениями
$users = array(); //Инициализируем массив с пользователями
 foreach ($keys as $key) {     
     $users[] = $this->database->whereAll("users", 'id', $key); //Две скобочки решают 
}
Правильно он делает. Ты каждый раз переопределяешь переменную. Делай так:

$users[] = $this->database->whereAll("users", 'id', $key);