@MouseZver Жаркие модеры не хотят менять --- Добавлено --- А кстати ведь можно https://xenforo.com/community/threads/change-username.55382/ Но нужен или плагин или жаркий администратор. Но тот точно без постели ничего не делает.
А ты почему спрашиваешь? --- Добавлено --- Я видел твой код на ларавел.ру, он никуда не годится. И, между прочим, ты не учёл возможное деление на ноль. ))) Есть ощущение, что ты не знаешь что это.
@artoodetoo PHP: public function addRating(Request $request) { $userAuth = Auth::user()->id; //сначала узнаём, голосовал ли уже пользователь //этот пост $users = DB::table('user_rating') ->where('master_id', '=', $request->userId) ->where('user_id', '=', $userAuth) ->get(); //если голосовал, то обновляем его новый голос if($users->count() == 1) { $this->updateRating($users[0]->id, $request); } // иначе первый раз голосуем else { $id = DB::table('user_rating')->insertGetId( [ 'user_id' => $userAuth, 'master_id' => $request->userId, 'valuation' => $request->rating ]); $this->updateRating($id, $request); } } public function updateRating($id, $data) { //обновление рейтинга, для пользователя DB::table('user_rating') ->where('id', $id) ->update(['valuation' => $data->rating]); $collection = DB::table('user_rating') ->where('master_id', '=', $data->userId) ->select(DB::raw('Round(AVG(valuation), 1) as average'))->get(); $avg = $collection->first()->average; User::where('id', $data->userId) ->update(['rating' => $avg]); }
Так ты понимаешь что такео "деление на ноль" или нет? Будешь ускользать от ответа, я просто буду тебя игнорировать, Димон. Как уже игнорирует большинство участников форума.
Давай буквально построчно: Судя по параметру типа Request это методы контроллера. Лучше бы ты оформил операции в модели, ну да ладно... Что будет вот здесь $userAuth = Auth::user()->id; , если пользователь не залогинен? Вопрос на миллион! $users = DB::table('user_rating') почему ты не используешь класс модели eloquent, ты его не объявлял? почему блядь это $users ? это пользователи??????????????? $userAuth = Auth::user()->id ->where('master_id', '=', $request->userId) ->where('user_id', '=', $userAuth) эммм... что ты хотел этим выразить. два раза используется userId взятый какбы из разных источников. непонятно. это голосование пользователя за пользователя? и за себя можно, да? get() получает коллекцию записей. насколько я дружу со здравым смыслом, не может не должно быть более одной записи о голосе пользователя за определенную хуйню. то есть там должен быть уникальный ключ! а как следствие, в коде first() для получения этой единственной записи и проверка на null. когда в SQL упоминается AVG и не упоминается GROUP BY, то возвращается одна строка - среднее по всем выбранным значениям. у тебя опять зачем-то коллекция и потом извленение первой строки из неё. можно было сразу first() дальше мне оценивать в уме лень. действительно, раз ты используешь avg на стороне sql, то деление на ноль контролирует сам сервер - это хорошо. в варианте на ларавел.ру у тебя там своё деление было и без проверок. это бага. --- Добавлено --- ты работаешь где-то? надеюсь нет. делить на ноль нельзя, пацаны. никогда. --- Добавлено --- теоретически - математически, результат деления на ноль это бесконечность. практически же, в мире прикладных языков программирования, это всегда результат недосмотра и приводит к нежданчикам.
@artoodetoo мидлы я потом проставлю, сейчас хочу, что бы всё в целом работало $users потому что копипаст Не использую eloquent, потому что не полностью его изучил Что бы пользователь не смог сам ставить себе рейтинг, над этим я ещё буду работать
ну понятно что копипаст. я говорю что надо понимать что ты пишешь, поэтому правильное именование это важно. ты используешь классы eloquent, но не везде. ты же пишешь User::where... так что не надо тут лохматить бабушку. ты просто опять скопировал кусочек откуда-то и хочешь чтобы тебе кто-то рассказал чем плох код ещё кого-то. а где твой собственный мозг, Дима? хрена ты так научишся чему-то.
@artoodetoo скопипастил я вот это PHP: $users = DB::table('users') ->select(DB::raw('count(*) as user_count, status')) ->where('status', '<>', 1) ->groupBy('status') ->get(); Заменил на это PHP: $users = DB::table('user_rating') ->where('master_id', '=', $request->userId) ->where('user_id', '=', $userAuth) ->get();
Дима, это никому не интересно что там было до тебя. Заведи класс типа Rating extends Model и по возможности ссылайся на него. Это повысит описательность твоего кода. Используй говорящие имена по теме. Хотя иногда лучше иметь абстрактный $x чем $users который совсем не пользователей хранит. Понимаешь о чём я? Если тебе нужна не коллекция, а единственная запись, используй first(). Не get() а от него потом first() а сразу first(). Всегда оценивай какие в программе должны быть ограничения на уникальность данных. Правильные ключи здорово экономят время.
Нет --- Добавлено --- Не всё равно занять в долг милллион и вытащить оттуда доллар или занять доллар. --- Добавлено --- Не надо делать то, в чём нет смысла. Лишний код это грабли на которые ты наступишь завтра.