Я пытаюсь объединить 2 таблицы (рецепты + сообщения) и добавить -> paginate (5) к запросам.
Но по какой-то причине я получаю эту ошибку:
Нарушение кардинальности: 1222 Используемые операторы SELECT имеют различное количество столбцов (SQL: (выберите count (*) как совокупность из
posts
Мой код:
$recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at") ->where("user_id", "=", $id); $items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at") ->where("user_id", "=", $id) ->union($recipes) ->paginate(5)->get();
Я делаю что-то неправильно?
Вы правы, проблема с разбивкой на страницы вызывает проблемы. Прямо сейчас вы можете создать представление и запросить представление вместо фактических таблиц или создать свой Paginator
вручную:
$page = Input::get('page', 1); $paginate = 5; $recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at") ->where("user_id", "=", $id); $items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at") ->where("user_id", "=", $id) ->union($recipes) ->get(); $slice = array_slice($items, $paginate * ($page - 1), $paginate); $result = Paginator::make($slice, count($items), $paginate); return View::make('yourView',compact('result'));
Сортировать по
$page = Input::get('page', 1); $paginate = 5; $recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at") ->where("user_id", "=", $id); $items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at") ->where("user_id", "=", $id) ->union($recipes) ->orderBy('created_at','desc') ->get(); $slice = array_slice($items, $paginate * ($page - 1), $paginate); $result = Paginator::make($slice, count($items), $paginate); return View::make('yourView',compact('result'))->with( 'result', $result );
по$page = Input::get('page', 1); $paginate = 5; $recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at") ->where("user_id", "=", $id); $items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at") ->where("user_id", "=", $id) ->union($recipes) ->orderBy('created_at','desc') ->get(); $slice = array_slice($items, $paginate * ($page - 1), $paginate); $result = Paginator::make($slice, count($items), $paginate); return View::make('yourView',compact('result'))->with( 'result', $result );
Просмотр страницы :
@foreach($result as $data) {{ $data->your_column_name;}} @endforeach {{$result->links();}} //for pagination
его помощь большему количеству людей .. потому что никто не может понять, что данные показывают в виде соединения страниц с разбиением на страницы и упорядочением .. thank u
Я уже столкнулся с такой проблемой. Я нашел поток также не о pagination
а о unions
.
См. Эту ссылку: Сортировка запросов UNION с помощью Laravel 4.1
@Mohamed Azher поделился приятным трюком, и он работает над моей проблемой.
$query = $query1->union($query2); $querySql = $query->toSql(); $query = DB::table(DB::raw("($querySql order by foo desc) as a"))->mergeBindings($query);
Это создает sql, как показано ниже:
select * from ( (select a as foo from foo) union (select b as foo from bar) ) as a order by foo desc;
И вы уже можете использовать Paginate Laravel так же, как обычно, как $query->paginate(5)
. (но вы должны раскошелиться, чтобы соответствовать вашей проблеме)
У меня была такая же проблема, и, к сожалению, я не смог получить ссылки на страницы с {{ $result->links() }}
, но я нашел другой способ записать фрагментацию страницы и ссылки на страницу
Индивидуальная разбивка на страницы с помощью Laravel 5
//Create a new Laravel collection from the array data $collection = new Collection($searchResults); //Define how many items we want to be visible in each page $perPage = 5; //Slice the collection to get the items to display in current page $currentPageSearchResults = $collection->slice($currentPage * $perPage, $perPage)->all(); //Create our paginator and pass it to the view $paginatedSearchResults= new LengthAwarePaginator($currentPageSearchResults, count($collection), $perPage); return view('search', ['results' => $paginatedSearchResults]);
$page = Input::get('page', 1); $paginate = 5; $recipes = DB::table("recipes")->select("id", "title", "user_id", "description", "created_at") ->where("user_id", "=", $id); $items = DB::table("posts")->select("id", "title", "user_id", "content", "created_at") ->where("user_id", "=", $id)->union($recipes)->get()->toArray(); $slice = array_slice($items, $paginate * ($page - 1), $paginate); $result = new Paginator($slice , $paginate);