Я настоятельно рекомендую не использовать объединения таблиц, так как это приведет к неудаче в масштабе.
Лучшее решение - получить пользователей, получить их профили, а затем отсортировать их, используя методы сбора данных laravel.
Вы можете использовать этот образец для достижения этого решения.
//get all users
$users = User::all();
//extract your users Ids
$userIds = $users->pluck('id')->toArray();
//get all profiles of your user Ids
$profiles = Profile::whereIn('user_id', $userIds)->get()->keyBy('user_id');
//now sort users based on being sponsored or not
$users = $users->sort(function($item1, $item2) use ($profiles) {
if($profiles[$item1->id]->sponsored == 1 && $profiles[$item2->id]->sponsored == 1){
return 0;
}
if($profiles[$item1->id]->sponsored == 1) return 1;
return -1;
});
Вы можете проверить эту ссылку , которая объясняет сортировку коллекции Laravel.