Сделал сайтик, постепенно дорабатываю, у меня там ~200 человек, определенные люди делают разные операции со своими пользователями, а их в свою очередь очень не удобно искать в общем списке людей.
Поэтому я хочу сделать сперва "избранный" список людей наверху, а затем всех остальных.
Только вот как это сделать? Если сделаю в БД колонку для какого user_id будет этот человек избранным, то натыкаюсь на проблему если он будет у нескольких пользователей пересекаться? Нужно обязательно чтоб на сервере данные хранились, куки и локал сторедж не подходит.
делаешь новую таблицу с колонками:
user_id, fav_user_id
и связываешь user_id этой новой таблицы с id таблицы юзеров как HasMany
в модели юзеров должно получиться что-то вроде:
public function favorites(): HasMany
{
return $this->hasMany(UserFavorite::class, 'user_id', 'id');
}
iBird Rose, ага, значит у меня будет сперва выборка один ко многим, затем из общего списка надо будет убрать юзеров которые уже есть в этом запросе и вывести остальных , верно?
Павел, ты юзеров потом сможешь вытаскивать в виде: User::query()->with('favorites')->get()
и тогда в relations ты будешь получать все fav_user_id для данного юзера
Павел, что значит остальных? в запросе выше у тебя выведутся все юзеры. и в внутри каждой коллекции будет relations "favorites", в котором будут все юзеры, которых он добавил в избранное
Павел, ну да. тут 2 запроса будет. тока как оптимально вывести я не придумал. т.е. вариант пока типа ты достаешь этих избранных юзеров в отдельный массив. потом из массива ВСЕХ юзеров удаляешь этих избранных. и потом делаешь array_merge($fav_users, $users) ставя этих избранных вперед.
может кто подскажет более правильный вариант.
Добавляешь колонку favorites в таблицу users. Если пользователь "избранный", то значение у него true, иначе false. После получаешь всех пользователей и сортируешь по этому параметру. В итоге будут отображаться избранные пользователи, а потом остальные.