1. PHP / Говнокод #28033

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    public function onAnswerPoll()
        {
            $data = request()->all();
    
            ValidatePollForm::run($data);
    
            try {
                $options = Option::find($data['option_ids']);
    
                $log = Crypt::decrypt($data['log']);
                $log['options'] = array_merge(
                    array_get($log, 'options', []),
                    $options->lists('id')
                );
                $log['comments'] = array_get($log, 'comments', []) + array_get($data, 'comments', []);
    
                $this->log = Crypt::encrypt($log);
                $this->option = $options->first();
                $this->poll = $this->loadPoll();
                $this->locations = Location::get();
                $this->step = ++$data['step'];
    
                if ($this->option->is_last) {
                    Log::store($this->poll, $log);
                    Option::whereIn('id', $log['options'])->get()->each(function ($item) {
                        $item->increment('votes');
                        $item->logs()->create();
                    });
                }
            } catch (Exception $e) {
                trace_log($e);
                return response()
                    ->json('Something was wrong.', 500);
            }
        }
    
        /**
         * onLoadDepartments
         */
        public function onLoadDepartments()
        {
            $data = request()->all();
    
            $validator = Validator::make($data, [
                'location' => 'required|exists:kitsoft_polls_locations,slug',
                'answer_id' => 'required|exists:kitsoft_polls_answers,id'
            ]);
    
            if ($validator->fails()) {
                throw new ValidationException($validator);
            }
    
            try {
                $this->departments = Department::make()
                    ->whereHas('locations', function ($query) use ($data) {
                        return $query->where('slug', $data['location']);
                    })
                    ->whereHas('answers', function ($query) use ($data) {
                        return $query->where('id', $data['answer_id']);
                    })
                    ->get();
            } catch (Exception $e) {
                trace_log($e);
                return response()
                    ->json('Something was wrong.', 500);
            }
        }

    Из слитых сорцов «Дія.City».

    Запостил: ISO, 18 Февраля 2022

    Комментарии (21) RSS

    • Пыхер пытается подражать программистам на настоящих языках, но получается не лучше, чем у попугая.
      Ответить
    • >whereHas('answers', function ($query) use ($data) {
                          return $query->where('id', $data['answer_id']);
                      })


      ух ты, они прекондишены прямо на ПХП пишут и передают в майсиквал!
      Ответить
      • илоквент же.
        Ответить
        • Ловите пхпшника!
          Ответить
        • Извини, я не говорю по пыхапячьи. Переведи пожалуйста на человечий
          Ответить
          • eloquent а.к.а. ларавел подражает старшим фреймворкам.

            https://laravel.com/docs/9.x/eloquent
            Ответить
            • Спасибо.

              А какано работает? Превращает пыхокод в SQL запросы, или получает всё, и фильтрует на стороне пхп?
              Ответить
              • этот пыхокод (который тело анонимной функции) --- абстракция query builder`а, который из него собирает SQL.
                Ответить
                • А если я напишу
                  return foo() ?  $query->where('slug', $data['location']) : $query->where('hujag', "petoz");

                  ?
                  Ответить
                  • в пхп есть уровень абстракции, позволяющий *несколько* отдалиться от БД --- PDO. query builder собирает запрос для PDO на SQL, но PDO поддерживает подготовленные предложения, то есть SQL уже написан, а значения, типа $data['location'] будет _экранированы_ и подставлены уже в готовый запрос, после чего он выполнится.

                    а выполнить запрос можно любой, или в я вас не так понял?
                    Ответить
                    • В какой момент вызовется переданная в "whereHas" функция, и что она вернет? Строку? Или же какой-то движок построит по ней синтаксическое дерево, и превратит его в SQL?

                      Как именно исполняется SQL -- через mysql_query или PDO -- тут не суть важно.
                      Ответить
                      • функция вызовется, когда поток управления дойдёт до вызова Department::make(), то есть, когда войдёт в блок try. where возвращает экземпляр класса Builder, который в конечном итоге будет превращён в SQL.
                        Ответить
                        • А зачем там функция вообще? Почему сразу нельзя посчитать
                          $condition = where('slug', $data['location']);
                          ->whereHas('locations', $condition);

                          ?
                          Ответить
                          • На Алтае местные жители не разрешают раскапывать могилы, даже если им уже больше 500 лет, поэтому они методично выслеживают археологов и отстреливают
                            Ответить
                          • потому, что whereHas ждёт замыкание. потому, что where надо ещё к чему-то применить, а не так вызвать, это не функция и не хелпер, а метод. c другой сторны пхп поддерживает компактный синтаксис стрелочных функций, но вы ведь понимаете, на каком сайте мы находимся.


                            $this->departments = Department::make()->whereHas('locations', fn($query) => $query->where('id', $data['answer_id']));
                            Ответить
            • Какие старшие эдды )))
              Ответить
    • Vanished
      Ответить

    Добавить комментарий