В бэкэнде Laravel у меня есть метод контроллера customers.index:

$result = $department->Customers()->getQuery();

        $result = QueryBuilder::for($result)
            ->allowedFilters([
                'title',
                'description',
                'email',
                'phone'
            ])
            ->defaultSort('title')
            ->allowedSorts([
                'title',
                'email'
            ]);    

        $result = $result->paginate($request->per_page ?: 10)->appends(request()->query());

        return response()->json([
            'message' => '',
            'data' => $result
        ]);

Теперь в интерфейсе Vuejs я хочу, чтобы строка запроса была похожа на

 host/api/customer?page=2&per_page=15&filter[title]=foo

Я попробовал этот подход:

const params = {
        page: this.page,
        per_page: 15,
        filter: {
          search: this.query
        }
      };    

      console.log(JSON.stringify(params));
      this.$axios
        .get(`/api/customer`, {
          params
        });

Но строка запроса стала:

customer?0=%7B%22page%22:1,%22per_page%22:15,%22filter%22:%7B%22search%22:%221231%22%7D%7D

У меня есть другой вариант: используйте литерал шаблона, например:

api/customer?filter[search]=${this.query}&page=${this.page}&per_page=${this.per_page}
  • Вопрос 1:

    как получить правильную строку запроса из объекта params

  • Вопрос 2:

    есть ли какая-либо документация по этому пути строки запроса filter[title]=...? как я могу использовать их в случаях AND или Or?

2
ghazyy 25 Апр 2020 в 15:07

1 ответ

Ваша проблема в том, что вы устанавливаете строки запроса в качестве параметров.

this.$axios
    .get(`/api/customer`, {
        params
    });

Должно быть.

this.$axios
    .get(`/api/customer`, {
        params: params
});

У них есть документация. Если вы хотите использовать сложную логику, я, вероятно, посмотрю, как она обрабатывает области действия. Затем вы выполняете логику в области Laravel и позволяете разработчику обрабатывать их.

0
mrhn 16 Сен 2021 в 11:46