Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет.
Подскажите пожалуйста бездарю) что сделать, чтоб все заработало: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'));
}
За ранее огромное спасибо! Прошу, сильно тухлыми помидорами не забрасывайте)
Не в сети
чтобы в адресной строке через запятую - такое только через javascript. но тебе должно быть пофигу как там выглядят параметры. лишь бы читались на стороне сервера. так вот, достаточно дополнить имя параметра квадратными скобками чтобы "множественный" параметр доходил весь — в виде массива
<input name="category[]" ...
request()->get('category') будет массивом значений
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Я так уже пробовал, но когда я ставлю category[] он выдает мне ошибку: explode() expects parameter 2 to be string, array given
Не в сети
Все, я разобрался))))
Функция paramToArray должна выглядеть так:
protected function paramToArray($param)
{
return explode($this->delimiter, implode($this->delimiter, $param));
}
Не в сети
Страницы 1