"PHP" / Говнокод #28033 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 ISO, (Updated )

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

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


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

            А какано работает? Превращает пыхокод в 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']));
                          Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8