I am trying to merge several builders to paginate search results of them, but this code returning me an error
My SearchController.php
public function index(Request $request)
{
$string = mb_strtolower($request->input('q'), "UTF-8");
if ($string != "") {
// $query = explode(" ", $string);
$query = $string;
} else {
$query = null;
}
if ($query != null) {
$news = $this->searchQuery(new News(), 'title', 'content', $query, false);
$last = $this->searchQuery(new Last(), 'title', 'description', $query, false);
$author = $this->searchQuery(new AuthorNews(), 'title', 'description', $query, false);
$tv = $this->searchQuery(new TvBroadcast(), 'name', 'description', $query, false);
$program = $this->searchQuery(new TvProgram(), 'name', 'description', $query, false);
$project = $this->searchQuery(new SpecProject(), 'title', 'description', $query, false);
$appointments = $this->searchQuery(new Appointment(), 'fio', 'position', $query, false);
//Новости по авторам
// $authors = $this->searchAuthor($query);
// dd($authors);
// 21520
$item = $news->merge($last);
$item = $item->merge($author);
$item = $item->merge($tv);
$item = $item->merge($program);
$item = $item->merge($project);
$item = $item->merge($appointments);
$items = $item->paginate(21);
$items_c = $items->total();
} else {
$items = null;
$items_c = 0;
$string = null;
}
$method = 'index';
return view('front.search.index', array('items' => $items, 'count' => $items_c, 'q' => $string, 'method' => $method));
}
public function searchQuery($model, $attr1, $attr2, $query, $stat, $author = false)
{
$items = $model->with('nodes')->whereHas('nodes', function ($q) use ($query, $attr1, $attr2) {
$q->where('language_id', '=', app()->getLocale())->where(function ($q) use ($query, $attr1, $attr2) {
$q->where(\DB::raw('lower(' . $attr1 . ')'), 'like', '%' . $query . '%')
->orWhere(\DB::raw('lower(' . $attr2 . ')'), 'like', '%' . $query . '%');
});
})->orderBy('created_at', 'desc');
if ($stat == true) {
$items = $items->where('stat', '=', 1);
}
if ($author) {
$items = $items->with(['author', 'author.nodes'])->orWhereHas('author.nodes', function ($q) use ($query) {
// foreach ($query as $elem) {
// $q->where(\DB::raw('lower(title)'), 'like', '%' . $elem . '%');
// }
$q->where(\DB::raw('lower(title)'), 'like', '%' . $query . '%');
});
}
return $items;
}
I have 7 Builders like this and I want to merge them
But when I am running my code I get an error like this
I also tried union() method and it doesn't work too
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire