Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Все, я разобрался))))
Функция paramToArray должна выглядеть так:
protected function paramToArray($param)
{
return explode($this->delimiter, implode($this->delimiter, $param));
}
Я так уже пробовал, но когда я ставлю category[] он выдает мне ошибку: explode() expects parameter 2 to be string, array given
Всем привет.
Подскажите пожалуйста бездарю) что сделать, чтоб все заработало: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'));
}
За ранее огромное спасибо! Прошу, сильно тухлыми помидорами не забрасывайте)