Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8/9/10 » Фильтрация данных » 28.05.2021 16:44:39

Все, я разобрался))))
Функция paramToArray должна выглядеть так:

protected function paramToArray($param)
    {
        return explode($this->delimiter, implode($this->delimiter, $param));

    }

#2 Re: Laravel 6/7/8/9/10 » Фильтрация данных » 28.05.2021 15:17:15

Я так уже пробовал, но когда я ставлю category[] он выдает мне ошибку: explode() expects parameter 2 to be string, array given

#3 Laravel 6/7/8/9/10 » Фильтрация данных » 28.05.2021 14:35:08

Agito
Ответов: 3

Всем привет.
Подскажите пожалуйста бездарю) что сделать, чтоб все заработало:lol:
Пробую сделать фильтрацию по статье:
Все вроде работает, но могу понять как сделать, чтобы по выбору нескольких чекбоксов формировался запрос: posts?category=4,5
а не такой как у меня сейчас получается: posts?category=4&category=5

В шаблоне index.blade использую форму с чекбоксами и кнопкой:

<form action="{{ route('posts.index') }}">
    <input name="category" type="checkbox" value="4">Marketing
    <input name="category" type="checkbox" value="5">Make money
    <button type="submit">OK</button>
</form>

QueryFilter.php:

<?php

namespace App\Filters;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

abstract class QueryFilter
{
    protected $request;

    protected $builder;

    protected $delimiter = ',';

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function filters()
    {
        return $this->request->query();
    }

    public function apply(Builder $builder)
    {
        $this->builder = $builder;

        foreach ($this->filters() as $name => $value) {
            if (method_exists($this, $name)) {
                call_user_func_array([$this, $name], array_filter([$value]));
            }
        }

        return $this->builder;
    }

    protected function paramToArray($param)
    {
        return explode($this->delimiter, $param);
    }
}

ProductFilter.php:

<?php

namespace App\Filters;

class ProductFilter extends QueryFilter
{
    public function category($id)
    {
        return $this->builder->whereIn('category_id', $this->paramToArray($id));
    }
}

Post.php:

public function scopeFilter(Builder $builder, QueryFilter $filters)
    {
        return $filters->apply($builder);
    }

PostController.php:

public function index(Request $request, ProductFilter $filters)
    {
       $posts = Post::with('category')->orderBy('id', 'desc')->filter($filters)->get();

       return view('admin.posts.index', compact('posts'));
    }

За ранее огромное спасибо! Прошу, сильно тухлыми помидорами не забрасывайте)

Подвал раздела