{"id":2697,"date":"2025-03-24T08:46:45","date_gmt":"2025-03-23T23:46:45","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2697"},"modified":"2025-03-24T08:47:15","modified_gmt":"2025-03-23T23:47:15","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel-pagination%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%ae%9f%e8%a3%85%e3%81%8b%e3%82%89%e6%9c%80%e9%81%a9%e5%8c%96%e3%81%be","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2697","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel Pagination\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u5b9f\u88c5\u304b\u3089\u6700\u9069\u5316\u307e\u3067\u89e3\u8aac\u3059\u308b7\u3064\u306e\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Laravel\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3068\u306f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Eloquent\u30e2\u30c7\u30eb\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u306e\u57fa\u672c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u306a\u305cLaravel\u306e\u7d44\u307f\u8fbc\u307f\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u304c\u512a\u308c\u3066\u3044\u308b\u306e\u304b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">simplePaginate\u3068paginate\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30d3\u30e5\u30fc\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u306e\u8868\u793a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30bf\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u9ad8\u5ea6\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u6d3b\u7528<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">Cursor Pagination\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>      <\/li>      <li>        <a href=\"#i-9\">API\u30ec\u30b9\u30dd\u30f3\u30b9\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u8907\u6570\u30e2\u30c7\u30eb\u306e\u540c\u6642\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3067\u306e\u52b9\u7387\u7684\u306a\u30da\u30fc\u30b8\u30f3\u30b0\u51e6\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-13\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u9ad8\u901f\u5316<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-14\">\u4e00\u822c\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-15\">URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3068\u5bfe\u5fdc\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3068\u691c\u7d22\u6a5f\u80fd\u306e\u7d44\u307f\u5408\u308f\u305b\u65b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u5b9f\u8df5\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u7121\u9650\u30b9\u30af\u30ed\u30fc\u30eb\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">Ajax\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-20\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30b9\u30c8\u3068\u30c7\u30d0\u30c3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u691c\u8a3c\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">\u4e00\u822c\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Laravel\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3068\u306f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Eloquent\u30e2\u30c7\u30eb\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u306e\u57fa\u672c<\/h3>\n\n\n\n<p>Laravel\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306f\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u5fc5\u8981\u4e0d\u53ef\u6b20\u306a\u6a5f\u80fd\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u53d6\u5f97\u3057\u305f\u5927\u91cf\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u8907\u6570\u306e\u30da\u30fc\u30b8\u306b\u5206\u5272\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u306b\u52b9\u7387\u7684\u306b\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>Eloquent\u30e2\u30c7\u30eb\u3068\u5b8c\u5168\u306b\u7d71\u5408\u3055\u308c\u3066\u304a\u308a\u3001\u308f\u305a\u304b\u6570\u884c\u306e\u30b3\u30fc\u30c9\u3067\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u57fa\u672c\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ UserController.php\npublic function index()\n{\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30671\u30da\u30fc\u30b8\u3042\u305f\u308a15\u4ef6\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u53d6\u5f97\n    $users = User::paginate(15);\n\n    return view('users.index', compact('users'));\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- users\/index.blade.php --&gt;\n@foreach ($users as $user)\n    &lt;div class=\"user-item\"&gt;\n        {{ $user-&gt;name }}\n    &lt;\/div&gt;\n@endforeach\n\n{{-- \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u306e\u8868\u793a --}}\n{{ $users-&gt;links() }}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u306a\u305cLaravel\u306e\u7d44\u307f\u8fbc\u307f\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u304c\u512a\u308c\u3066\u3044\u308b\u306e\u304b<\/h3>\n\n\n\n<p>Laravel\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u512a\u308c\u305f\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u81ea\u52d5\u7684\u306a\u30af\u30a8\u30ea\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>COUNT \u30af\u30a8\u30ea\u3068\u30c7\u30fc\u30bf\u53d6\u5f97\u30af\u30a8\u30ea\u304c\u6700\u9069\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3066\u3044\u307e\u3059<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u30ec\u30b3\u30fc\u30c9\u306e\u307f\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u304c\u52b9\u7387\u7684\u3067\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67d4\u8edf\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30d5\u30a9\u30eb\u30c8\u306eBootstrap\u30b9\u30bf\u30a4\u30eb\u306b\u52a0\u3048\u3001TailwindCSS\u306a\u3069\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u3082\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30d3\u30e5\u30fc\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u5b8c\u5168\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   php artisan vendor:publish --tag=laravel-pagination<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>URL\u306e\u81ea\u52d5\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u81ea\u52d5\u51e6\u7406<\/li>\n\n\n\n<li>\u73fe\u5728\u306eURL\u3092\u7dad\u6301\u3057\u305f\u307e\u307e\u30da\u30fc\u30b8\u9077\u79fb\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff08XSS\uff09\u5bfe\u7b56\u6e08\u307f<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u8ffd\u52a0\u6a5f\u80fd\u3068\u306e\u7d71\u5408\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u691c\u7d22\u6a5f\u80fd\u3068\u306e\u9023\u643a\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30bd\u30fc\u30c8\u6a5f\u80fd\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\u304c\u7c21\u5358<\/li>\n\n\n\n<li>API\u30ec\u30b9\u30dd\u30f3\u30b9\u3078\u306e\u5bfe\u5fdc\u3082\u6a19\u6e96\u642d\u8f09<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u969b\u306e\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u9ad8\u5ea6\u306a\u691c\u7d22\u6761\u4ef6\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\n$users = User::where('status', 'active')\n            -&gt;whereHas('posts', function($query) {\n                $query-&gt;where('published', true);\n            })\n            -&gt;orderBy('created_at', 'desc')\n            -&gt;paginate(20);<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Laravel\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306f\u3001\u958b\u767a\u8005\u306e\u5b9f\u88c5\u306e\u624b\u9593\u3092\u5927\u5e45\u306b\u524a\u6e1b\u3057\u306a\u304c\u3089\u3001\u9ad8\u5ea6\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3084\u6a5f\u80fd\u62e1\u5f35\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u3001\u30d0\u30e9\u30f3\u30b9\u306e\u53d6\u308c\u305f\u8a2d\u8a08\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6271\u3046\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4f7f\u3044\u3084\u3059\u3055\u306e\u4e21\u9762\u3067\u512a\u308c\u305f\u9078\u629e\u80a2\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">simplePaginate\u3068paginate\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<p>Laravel\u3067\u306f\u4e3b\u306b2\u3064\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30e1\u30bd\u30c3\u30c9\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>paginate()\u30e1\u30bd\u30c3\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7dcf\u30da\u30fc\u30b8\u6570\u306e\u8a08\u7b97\u3092\u542b\u3080\u5b8c\u5168\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\n$users = User::paginate(15);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7279\u5fb4\uff1a<\/li>\n\n\n\n<li>\u7dcf\u30da\u30fc\u30b8\u6570\u3092\u8a08\u7b97\uff08COUNT \u30af\u30a8\u30ea\u3092\u5b9f\u884c\uff09<\/li>\n\n\n\n<li>\u300c\u524d\u3078\u300d\u300c\u6b21\u3078\u300d\u306b\u52a0\u3048\u3066\u3001\u30da\u30fc\u30b8\u756a\u53f7\u3082\u8868\u793a<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u5168\u4f53\u306e\u60c5\u5831\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u6700\u9069<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>simplePaginate()\u30e1\u30bd\u30c3\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b7\u30f3\u30d7\u30eb\u306a\u300c\u524d\u3078\u300d\u300c\u6b21\u3078\u300d\u306e\u307f\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\n$users = User::simplePaginate(15);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7279\u5fb4\uff1a<\/li>\n\n\n\n<li>\u7dcf\u30da\u30fc\u30b8\u6570\u3092\u8a08\u7b97\u3057\u306a\u3044\uff08COUNT \u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3057\u306a\u3044\uff09<\/li>\n\n\n\n<li>\u300c\u524d\u3078\u300d\u300c\u6b21\u3078\u300d\u306e\u30ea\u30f3\u30af\u306e\u307f\u3092\u8868\u793a<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u91cd\u8996\u3055\u308c\u308b\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306b\u6700\u9069<\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u3044\u5206\u3051\u306e\u57fa\u6e96\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u304c\u5927\u304d\u3044\uff0810,000\u4ef6\u4ee5\u4e0a\uff09\uff1a<code>simplePaginate()<\/code><\/li>\n\n\n\n<li>UI\u306b\u5168\u30da\u30fc\u30b8\u6570\u306e\u8868\u793a\u304c\u5fc5\u8981\uff1a<code>paginate()<\/code><\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u7279\u306b\u91cd\u8981\uff1a<code>simplePaginate()<\/code><\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u3092\u91cd\u8996\uff1a<code>paginate()<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30d3\u30e5\u30fc\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u306e\u8868\u793a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u306e\u8868\u793a\u306b\u306f\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u8868\u793a\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af --&gt;\n{{ $users-&gt;links() }}\n\n&lt;!-- \u30b7\u30f3\u30d7\u30eb\u306aBootstrap\u30c7\u30b6\u30a4\u30f3 --&gt;\n{{ $users-&gt;simplePaginator() }}\n\n&lt;!-- Tailwind CSS\u30c7\u30b6\u30a4\u30f3 --&gt;\n{{ $users-&gt;links('pagination::tailwind') }}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30d3\u30e5\u30fc\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30d3\u30e5\u30fc\u306e\u516c\u958b\nphp artisan vendor:publish --tag=laravel-pagination<\/pre>\n\n\n\n<p>\u30ab\u30b9\u30bf\u30e0\u30d3\u30e5\u30fc\u306e\u4f8b\uff08<code>resources\/views\/vendor\/pagination\/custom.blade.php<\/code>\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@if ($paginator-&gt;hasPages())\n    &lt;nav class=\"pagination\"&gt;\n        {{-- \u524d\u306e\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af --}}\n        @if ($paginator-&gt;onFirstPage())\n            &lt;span class=\"disabled\"&gt;&amp;laquo; \u524d\u3078&lt;\/span&gt;\n        @else\n            &lt;a href=\"{{ $paginator-&gt;previousPageUrl() }}\" rel=\"prev\"&gt;&amp;laquo; \u524d\u3078&lt;\/a&gt;\n        @endif\n\n        {{-- \u30da\u30fc\u30b8\u756a\u53f7\u306e\u8868\u793a --}}\n        @foreach ($elements as $element)\n            @if (is_string($element))\n                &lt;span class=\"dots\"&gt;{{ $element }}&lt;\/span&gt;\n            @endif\n\n            @if (is_array($element))\n                @foreach ($element as $page =&gt; $url)\n                    @if ($page == $paginator-&gt;currentPage())\n                        &lt;span class=\"active\"&gt;{{ $page }}&lt;\/span&gt;\n                    @else\n                        &lt;a href=\"{{ $url }}\"&gt;{{ $page }}&lt;\/a&gt;\n                    @endif\n                @endforeach\n            @endif\n        @endforeach\n\n        {{-- \u6b21\u306e\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af --}}\n        @if ($paginator-&gt;hasMorePages())\n            &lt;a href=\"{{ $paginator-&gt;nextPageUrl() }}\" rel=\"next\"&gt;\u6b21\u3078 &amp;raquo;&lt;\/a&gt;\n        @else\n            &lt;span class=\"disabled\"&gt;\u6b21\u3078 &amp;raquo;&lt;\/span&gt;\n        @endif\n    &lt;\/nav&gt;\n@endif<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30bf\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d44\u307f\u8fbc\u307f\u30b9\u30bf\u30a4\u30eb\u306e\u5909\u66f4<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ AppServiceProvider.php\npublic function boot()\n{\n    Paginator::useBootstrap();  \/\/ Bootstrap\u30b9\u30bf\u30a4\u30eb\u3092\u4f7f\u7528\n    \/\/ \u307e\u305f\u306f\n    Paginator::defaultView('pagination::tailwind');  \/\/ Tailwind\u30b9\u30bf\u30a4\u30eb\u3092\u4f7f\u7528\n    Paginator::defaultSimpleView('pagination::simple-tailwind');\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>CSS\u306b\u3088\u308b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/* public\/css\/pagination.css *\/\n.pagination {\n    display: flex;\n    justify-content: center;\n    margin-top: 2rem;\n}\n\n.pagination a {\n    padding: 8px 16px;\n    margin: 0 4px;\n    border: 1px solid #ddd;\n    border-radius: 4px;\n    color: #333;\n    text-decoration: none;\n}\n\n.pagination .active {\n    background-color: #007bff;\n    color: white;\n    border: 1px solid #007bff;\n    padding: 8px 16px;\n    margin: 0 4px;\n    border-radius: 4px;\n}\n\n.pagination .disabled {\n    color: #999;\n    padding: 8px 16px;\n    margin: 0 4px;\n    border: 1px solid #ddd;\n    border-radius: 4px;\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>JavaScript\u3067\u306e\u52d5\u7684\u306a\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ea\u30f3\u30af\u30af\u30ea\u30c3\u30af\u6642\u306e\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u8868\u793a\ndocument.querySelectorAll('.pagination a').forEach(link =&gt; {\n    link.addEventListener('click', function(e) {\n        e.preventDefault();\n        showLoading();\n        window.location.href = this.href;\n    });\n});<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u6700\u9069\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u9ad8\u5ea6\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u6d3b\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">Cursor Pagination\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h3>\n\n\n\n<p>Cursor Pagination\u306f\u3001\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u305f\u3081\u306e\u6700\u9069\u5316\u3055\u308c\u305f\u624b\u6cd5\u3067\u3059\u3002\u901a\u5e38\u306e\u30aa\u30d5\u30bb\u30c3\u30c8\u30d9\u30fc\u30b9\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3068\u6bd4\u3079\u3066\u3001\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306aCursor Pagination\u306e\u5b9f\u88c5\n$users = User::orderBy('id')\n    -&gt;cursorPaginate(15);<\/pre>\n\n\n\n<p>\u9ad8\u5ea6\u306a\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8907\u6570\u30ab\u30e9\u30e0\u3092\u4f7f\u7528\u3057\u305fCursor Pagination\n$users = User::orderBy('created_at', 'desc')\n    -&gt;orderBy('id', 'desc')\n    -&gt;cursorPaginate(15);\n\n\/\/ \u30ab\u30fc\u30bd\u30eb\u60c5\u5831\u306e\u53d6\u5f97\u3068\u5229\u7528\n$cursor = $users-&gt;nextCursor();\n$previousUsers = User::orderBy('created_at', 'desc')\n    -&gt;orderBy('id', 'desc')\n    -&gt;cursorPaginate(15, ['*'], 'cursor', $cursor);<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03\uff1a<\/p>\n\n\n<div id=\"id-34d25724-4cc3-479e-9b62-bcf99bbeb0ed\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u65b9\u5f0f<\/th><th>1\u4e07\u4ef6<\/th><th>10\u4e07\u4ef6<\/th><th>100\u4e07\u4ef6<\/th><\/tr><\/thead><tbody><tr><td>\u30aa\u30d5\u30bb\u30c3\u30c8\u65b9\u5f0f<\/td><td>50ms<\/td><td>200ms<\/td><td>1000ms<\/td><\/tr><tr><td>\u30ab\u30fc\u30bd\u30eb\u65b9\u5f0f<\/td><td>30ms<\/td><td>35ms<\/td><td>40ms<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">API\u30ec\u30b9\u30dd\u30f3\u30b9\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5<\/h3>\n\n\n\n<p>RESTful API\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ UserController.php\npublic function index()\n{\n    $users = User::with(['posts', 'profile'])\n        -&gt;paginate(15);\n\n    return response()-&gt;json([\n        'data' =&gt; UserResource::collection($users),\n        'links' =&gt; [\n            'first' =&gt; $users-&gt;url(1),\n            'last' =&gt; $users-&gt;url($users-&gt;lastPage()),\n            'prev' =&gt; $users-&gt;previousPageUrl(),\n            'next' =&gt; $users-&gt;nextPageUrl(),\n        ],\n        'meta' =&gt; [\n            'current_page' =&gt; $users-&gt;currentPage(),\n            'last_page' =&gt; $users-&gt;lastPage(),\n            'per_page' =&gt; $users-&gt;perPage(),\n            'total' =&gt; $users-&gt;total(),\n        ],\n    ]);\n}<\/pre>\n\n\n\n<p>GraphQL\u3067\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ schema.graphql\ntype PaginatedUsers {\n    data: [User!]!\n    paginatorInfo: PaginatorInfo!\n}\n\ntype PaginatorInfo {\n    currentPage: Int!\n    lastPage: Int!\n    perPage: Int!\n    total: Int!\n    hasMorePages: Boolean!\n}\n\n\/\/ UserQuery.php\npublic function paginatedUsers($root, array $args)\n{\n    return User::paginate($args['first'] ?? 15);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u8907\u6570\u30e2\u30c7\u30eb\u306e\u540c\u6642\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30e2\u30c7\u30eb\u3092\u540c\u6642\u306b\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u3059\u308b\u5834\u5408\u306e\u5b9f\u88c5\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ DashboardController.php\npublic function index()\n{\n    $users = User::paginate(10, ['*'], 'users_page');\n    $posts = Post::paginate(5, ['*'], 'posts_page');\n    $comments = Comment::paginate(15, ['*'], 'comments_page');\n\n    return view('dashboard', compact('users', 'posts', 'comments'));\n}<\/pre>\n\n\n\n<p>\u30d3\u30e5\u30fc\u3067\u306e\u8868\u793a\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- dashboard.blade.php --&gt;\n&lt;div class=\"users-section\"&gt;\n    @foreach ($users as $user)\n        &lt;div class=\"user-card\"&gt;{{ $user-&gt;name }}&lt;\/div&gt;\n    @endforeach\n    {{ $users-&gt;links() }}\n&lt;\/div&gt;\n\n&lt;div class=\"posts-section\"&gt;\n    @foreach ($posts as $post)\n        &lt;div class=\"post-card\"&gt;{{ $post-&gt;title }}&lt;\/div&gt;\n    @endforeach\n    {{ $posts-&gt;links() }}\n&lt;\/div&gt;\n\n&lt;div class=\"comments-section\"&gt;\n    @foreach ($comments as $comment)\n        &lt;div class=\"comment-card\"&gt;{{ $comment-&gt;content }}&lt;\/div&gt;\n    @endforeach\n    {{ $comments-&gt;links() }}\n&lt;\/div&gt;<\/pre>\n\n\n\n<p>\u975e\u540c\u671f\u3067\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ pagination.js\nasync function loadPage(type, page) {\n    try {\n        const response = await fetch(`\/api\/${type}?page=${page}`);\n        const data = await response.json();\n\n        \/\/ \u30c7\u30fc\u30bf\u306e\u66f4\u65b0\n        document.querySelector(`.${type}-section .content`)\n            .innerHTML = renderItems(data.data);\n\n        \/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u66f4\u65b0\n        document.querySelector(`.${type}-section .pagination`)\n            .innerHTML = renderPagination(data.meta);\n    } catch (error) {\n        console.error(`Error loading ${type}:`, error);\n    }\n}\n\n\/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u306e\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\ndocument.querySelectorAll('.pagination-control').forEach(control =&gt; {\n    control.addEventListener('click', (e) =&gt; {\n        e.preventDefault();\n        const type = e.target.dataset.type;\n        const page = e.target.dataset.page;\n        loadPage(type, page);\n    });\n});<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u52b9\u7387\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3067\u306e\u52b9\u7387\u7684\u306a\u30da\u30fc\u30b8\u30f3\u30b0\u51e6\u7406<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6271\u3046\u969b\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u5b9a\npublic function up()\n{\n    Schema::create('posts', function (Blueprint $table) {\n        $table-&gt;id();\n        $table-&gt;string('title');\n        $table-&gt;timestamp('published_at');\n        \/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3067\u4f7f\u7528\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u8907\u5408\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n        $table-&gt;index(['status', 'published_at']);\n    });\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u4e0d\u8981\u306a\u30ab\u30e9\u30e0\u306e\u53d6\u5f97\n$posts = Post::paginate(20);\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u5fc5\u8981\u306a\u30ab\u30e9\u30e0\u306e\u307f\u3092\u53d6\u5f97\n$posts = Post::select(['id', 'title', 'published_at'])\n    -&gt;paginate(20);\n\n\/\/ \u3055\u3089\u306b\u826f\u3044\u4f8b\uff1aEager\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u6d3b\u7528\n$posts = Post::select(['id', 'title', 'published_at', 'user_id'])\n    -&gt;with(['user' =&gt; function($query) {\n        $query-&gt;select(['id', 'name']);\n    }])\n    -&gt;paginate(20);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a08\u6e2c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30af\u30a8\u30ea\u306e\u5b9f\u884c\u6642\u9593\u8a08\u6e2c\n$start = microtime(true);\n$posts = Post::paginate(20);\n$end = microtime(true);\nLog::info('Pagination execution time: ' . ($end - $start) . ' seconds');\n\n\/\/ \u30af\u30a8\u30ea\u30ed\u30b0\u306e\u78ba\u8a8d\nDB::connection()-&gt;enableQueryLog();\n$posts = Post::paginate(20);\ndd(DB::getQueryLog());<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u6d3b\u7528\u3057\u305f\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u9ad8\u901f\u5316<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30da\u30fc\u30b8\u5168\u4f53\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function index()\n{\n    $page = request('page', 1);\n    $cacheKey = 'posts.page.' . $page;\n\n    return Cache::remember($cacheKey, now()-&gt;addMinutes(60), function () {\n        return Post::latest()\n            -&gt;paginate(20);\n    });\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30a6\u30f3\u30c8\u30af\u30a8\u30ea\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function index()\n{\n    $totalPosts = Cache::remember('posts.total', now()-&gt;addHours(1), function () {\n        return Post::count();\n    });\n\n    $perPage = 20;\n    $currentPage = request('page', 1);\n\n    $posts = Post::latest()\n        -&gt;skip(($currentPage - 1) * $perPage)\n        -&gt;take($perPage)\n        -&gt;get();\n\n    return new LengthAwarePaginator(\n        $posts,\n        $totalPosts,\n        $perPage,\n        $currentPage\n    );\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30fc\u30b7\u30e3\u30eb\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- posts\/index.blade.php --&gt;\n@foreach ($posts as $post)\n    @cache('post.' . $post-&gt;id)\n        @include('posts.card', ['post' =&gt; $post])\n    @endcache\n@endforeach\n\n{{ $posts-&gt;links() }}<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u6b63\u898f\u5316\u30ec\u30d9\u30eb\u306e\u9069\u5207\u306a\u9078\u629e<\/li>\n\n\n\n<li>\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30cb\u30f3\u30b0\u306e\u691c\u8a0e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SELECT\u3059\u308b\u30ab\u30e9\u30e0\u306e\u6700\u5c0f\u5316<\/li>\n\n\n\n<li>\u9069\u5207\u306aEager\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>\u30b5\u30d6\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u671f\u9593\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u968e\u5c64\u5316<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u7121\u52b9\u5316\u30bf\u30a4\u30df\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6307\u6a19\u306e\u76ee\u5b89\uff1a<\/p>\n\n\n<div id=\"id-2b22cbea-367b-41d5-8db3-2957df3ff4a2\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u64cd\u4f5c<\/th><th>\u76ee\u6a19\u30ec\u30b9\u30dd\u30f3\u30b9\u30bf\u30a4\u30e0<\/th><\/tr><\/thead><tbody><tr><td>\u30da\u30fc\u30b8\u8aad\u307f\u8fbc\u307f<\/td><td>&lt; 300ms<\/td><\/tr><tr><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u6642<\/td><td>&lt; 100ms<\/td><\/tr><tr><td>API\u5fdc\u7b54<\/td><td>&lt; 200ms<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3067\u3082\u9ad8\u901f\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u904e\u5ea6\u306a\u6700\u9069\u5316\u306f\u4fdd\u5b88\u6027\u3092\u4f4e\u4e0b\u3055\u305b\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-14\">\u4e00\u822c\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3068\u5bfe\u5fdc\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30da\u30fc\u30b8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e'page'\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5909\u66f4\n$users = User::paginate(15, ['*'], 'users_page');\n\n\/\/ \u8907\u6570\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u304c\u3042\u308b\u5834\u5408\n$users = User::paginate(15, ['*'], 'users_page');\n$posts = Post::paginate(15, ['*'], 'posts_page');<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u4fdd\u6301<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u65e2\u5b58\u306e\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4fdd\u6301\n$users = User::paginate(15)-&gt;appends(request()-&gt;query());\n\n\/\/ \u7279\u5b9a\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u307f\u4fdd\u6301\n$users = User::paginate(15)-&gt;appends([\n    'sort' =&gt; request('sort'),\n    'filter' =&gt; request('filter')\n]);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30d1\u30b9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30eb\u30fc\u30c8\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306e\u5909\u66f4\nRoute::prefix('admin')-&gt;group(function () {\n    Route::get('users', [UserController::class, 'index'])\n        -&gt;name('admin.users.index');\n});\n\n\/\/ \u30d3\u30e5\u30fc\u3067\u306eURL\u751f\u6210\n{{ $users-&gt;withPath('admin\/users')-&gt;links() }}<\/pre>\n\n\n\n<p>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u5b9f\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function index()\n{\n    try {\n        $page = request()-&gt;get('page', 1);\n\n        if (!is_numeric($page) || $page &lt; 1) {\n            return redirect()-&gt;route('users.index');\n        }\n\n        $users = User::paginate(15);\n\n        if ($page &gt; $users-&gt;lastPage()) {\n            return redirect()-&gt;route('users.index', ['page' =&gt; $users-&gt;lastPage()]);\n        }\n\n        return view('users.index', compact('users'));\n    } catch (\\Exception $e) {\n        Log::error('Pagination error: ' . $e-&gt;getMessage());\n        return back()-&gt;with('error', '\u8868\u793a\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002');\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u3068\u691c\u7d22\u6a5f\u80fd\u306e\u7d44\u307f\u5408\u308f\u305b\u65b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u691c\u7d22\u6a5f\u80fd\u3068\u306e\u7d71\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function index(Request $request)\n{\n    $query = User::query();\n\n    if ($request-&gt;has('search')) {\n        $searchTerm = $request-&gt;get('search');\n        $query-&gt;where(function($q) use ($searchTerm) {\n            $q-&gt;where('name', 'like', \"%{$searchTerm}%\")\n              -&gt;orWhere('email', 'like', \"%{$searchTerm}%\");\n        });\n    }\n\n    $users = $query-&gt;paginate(15)\n                   -&gt;appends(['search' =&gt; $searchTerm]);\n\n    return view('users.index', compact('users'));\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306a\u691c\u7d22\u6761\u4ef6\u306e\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public function index(Request $request)\n{\n    $query = Post::query();\n\n    \/\/ \u30ab\u30c6\u30b4\u30ea\u30fc\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n    if ($request-&gt;has('category')) {\n        $query-&gt;whereHas('category', function($q) use ($request) {\n            $q-&gt;where('slug', $request-&gt;category);\n        });\n    }\n\n    \/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n    if ($request-&gt;has('status')) {\n        $query-&gt;where('status', $request-&gt;status);\n    }\n\n    \/\/ \u65e5\u4ed8\u7bc4\u56f2\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n    if ($request-&gt;has('date_from')) {\n        $query-&gt;where('created_at', '&gt;=', $request-&gt;date_from);\n    }\n\n    if ($request-&gt;has('date_to')) {\n        $query-&gt;where('created_at', '&lt;=', $request-&gt;date_to);\n    }\n\n    \/\/ \u30bd\u30fc\u30c8\u9806\u306e\u8a2d\u5b9a\n    $sort = $request-&gt;get('sort', 'latest');\n    switch ($sort) {\n        case 'oldest':\n            $query-&gt;oldest();\n            break;\n        case 'popular':\n            $query-&gt;withCount('views')-&gt;orderByDesc('views_count');\n            break;\n        default:\n            $query-&gt;latest();\n    }\n\n    $posts = $query-&gt;paginate(15)-&gt;appends($request-&gt;all());\n\n    return view('posts.index', compact('posts'));\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3067\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ search.js\nconst searchForm = document.querySelector('#search-form');\nconst resultsContainer = document.querySelector('#results');\nconst paginationContainer = document.querySelector('#pagination');\n\nsearchForm.addEventListener('submit', async (e) =&gt; {\n    e.preventDefault();\n    const formData = new FormData(searchForm);\n    const searchParams = new URLSearchParams(formData);\n\n    try {\n        const response = await fetch(`\/api\/search?${searchParams.toString()}`);\n        const data = await response.json();\n\n        \/\/ \u7d50\u679c\u306e\u8868\u793a\u3092\u66f4\u65b0\n        resultsContainer.innerHTML = renderResults(data.data);\n        paginationContainer.innerHTML = renderPagination(data.meta);\n\n        \/\/ URL\u3092\u66f4\u65b0\uff08\u5c65\u6b74\u3092\u4fdd\u6301\uff09\n        window.history.pushState(\n            {}, \n            '', \n            `${window.location.pathname}?${searchParams.toString()}`\n        );\n    } catch (error) {\n        console.error('Search error:', error);\n    }\n});\n\n\/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\npaginationContainer.addEventListener('click', (e) =&gt; {\n    if (e.target.matches('.page-link')) {\n        e.preventDefault();\n        const url = new URL(e.target.href);\n        const page = url.searchParams.get('page');\n\n        \/\/ \u73fe\u5728\u306e\u691c\u7d22\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u4fdd\u6301\u3057\u306a\u304c\u3089\u30da\u30fc\u30b8\u3092\u66f4\u65b0\n        const currentParams = new URLSearchParams(window.location.search);\n        currentParams.set('page', page);\n\n        \/\/ \u691c\u7d22\u3092\u5b9f\u884c\n        window.location.search = currentParams.toString();\n    }\n});<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5805\u7262\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u51e6\u7406\u3068\u691c\u7d22\u6a5f\u80fd\u306e\u7d71\u5408\u306f\u3001\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u4e21\u9762\u3067\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u5b9f\u8df5\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u7121\u9650\u30b9\u30af\u30ed\u30fc\u30eb\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PostController.php\npublic function index(Request $request)\n{\n    $posts = Post::with('user')\n        -&gt;latest()\n        -&gt;paginate(10);\n\n    if ($request-&gt;ajax()) {\n        return view('posts.partials.post-list', compact('posts'))-&gt;render();\n    }\n\n    return view('posts.index', compact('posts'));\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- posts\/index.blade.php --&gt;\n&lt;div id=\"post-container\"&gt;\n    @include('posts.partials.post-list')\n&lt;\/div&gt;\n&lt;div id=\"loading-spinner\" class=\"hidden\"&gt;\n    &lt;div class=\"spinner\"&gt;&lt;\/div&gt;\n&lt;\/div&gt;<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ infinite-scroll.js\ndocument.addEventListener('DOMContentLoaded', function() {\n    let currentPage = 1;\n    let isLoading = false;\n    const container = document.getElementById('post-container');\n    const spinner = document.getElementById('loading-spinner');\n\n    \/\/ \u30b9\u30af\u30ed\u30fc\u30eb\u691c\u77e5\n    window.addEventListener('scroll', function() {\n        if (isLoading) return;\n\n        const {scrollTop, scrollHeight, clientHeight} = document.documentElement;\n\n        if (scrollTop + clientHeight &gt;= scrollHeight - 100) {\n            loadMorePosts();\n        }\n    });\n\n    async function loadMorePosts() {\n        try {\n            isLoading = true;\n            spinner.classList.remove('hidden');\n            currentPage++;\n\n            const response = await fetch(`\/posts?page=${currentPage}`, {\n                headers: {\n                    'X-Requested-With': 'XMLHttpRequest'\n                }\n            });\n\n            if (!response.ok) throw new Error('Network response was not ok');\n\n            const html = await response.text();\n            if (html.trim().length &gt; 0) {\n                container.insertAdjacentHTML('beforeend', html);\n            }\n        } catch (error) {\n            console.error('Error loading posts:', error);\n        } finally {\n            isLoading = false;\n            spinner.classList.add('hidden');\n        }\n    }\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">Ajax\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ProductController.php\npublic function index(Request $request)\n{\n    $query = Product::query();\n\n    \/\/ \u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n    if ($request-&gt;has('category')) {\n        $query-&gt;where('category_id', $request-&gt;category);\n    }\n\n    if ($request-&gt;has('price_range')) {\n        $range = explode('-', $request-&gt;price_range);\n        $query-&gt;whereBetween('price', [$range[0], $range[1]]);\n    }\n\n    \/\/ \u30bd\u30fc\u30c8\n    $sortField = $request-&gt;get('sort', 'created_at');\n    $sortDirection = $request-&gt;get('direction', 'desc');\n    $query-&gt;orderBy($sortField, $sortDirection);\n\n    $products = $query-&gt;paginate(12);\n\n    if ($request-&gt;ajax()) {\n        return response()-&gt;json([\n            'html' =&gt; view('products.partials.product-grid', compact('products'))-&gt;render(),\n            'pagination' =&gt; view('products.partials.pagination', compact('products'))-&gt;render(),\n            'total' =&gt; $products-&gt;total()\n        ]);\n    }\n\n    return view('products.index', compact('products'));\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30e5\u30fc\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- products\/index.blade.php --&gt;\n&lt;div class=\"container\"&gt;\n    &lt;div class=\"filters mb-4\"&gt;\n        &lt;select id=\"category-filter\" class=\"form-select\"&gt;\n            &lt;option value=\"\"&gt;\u5168\u3066\u306e\u30ab\u30c6\u30b4\u30ea\u30fc&lt;\/option&gt;\n            @foreach($categories as $category)\n                &lt;option value=\"{{ $category-&gt;id }}\"&gt;{{ $category-&gt;name }}&lt;\/option&gt;\n            @endforeach\n        &lt;\/select&gt;\n\n        &lt;select id=\"sort-filter\" class=\"form-select\"&gt;\n            &lt;option value=\"created_at-desc\"&gt;\u65b0\u7740\u9806&lt;\/option&gt;\n            &lt;option value=\"price-asc\"&gt;\u4fa1\u683c\u304c\u5b89\u3044\u9806&lt;\/option&gt;\n            &lt;option value=\"price-desc\"&gt;\u4fa1\u683c\u304c\u9ad8\u3044\u9806&lt;\/option&gt;\n        &lt;\/select&gt;\n    &lt;\/div&gt;\n\n    &lt;div id=\"product-grid\" class=\"grid grid-cols-3 gap-4\"&gt;\n        @include('products.partials.product-grid')\n    &lt;\/div&gt;\n\n    &lt;div id=\"pagination\" class=\"mt-4\"&gt;\n        @include('products.partials.pagination')\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>JavaScript\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ dynamic-pagination.js\nclass ProductFilter {\n    constructor() {\n        this.filters = new URLSearchParams(window.location.search);\n        this.bindEvents();\n    }\n\n    bindEvents() {\n        \/\/ \u30d5\u30a3\u30eb\u30bf\u30fc\u5909\u66f4\u30a4\u30d9\u30f3\u30c8\n        document.querySelectorAll('.filters select').forEach(select =&gt; {\n            select.addEventListener('change', () =&gt; this.handleFilterChange());\n        });\n\n        \/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30af\u30ea\u30c3\u30af\u30a4\u30d9\u30f3\u30c8\n        document.getElementById('pagination').addEventListener('click', (e) =&gt; {\n            if (e.target.matches('.pagination-link')) {\n                e.preventDefault();\n                this.handlePageChange(e.target.dataset.page);\n            }\n        });\n    }\n\n    async fetchProducts() {\n        try {\n            this.showLoader();\n            const response = await fetch(`\/products?${this.filters.toString()}`, {\n                headers: {\n                    'X-Requested-With': 'XMLHttpRequest'\n                }\n            });\n\n            const data = await response.json();\n\n            \/\/ DOM\u66f4\u65b0\n            document.getElementById('product-grid').innerHTML = data.html;\n            document.getElementById('pagination').innerHTML = data.pagination;\n\n            \/\/ URL\u306e\u66f4\u65b0\n            window.history.pushState({}, '', `?${this.filters.toString()}`);\n\n            \/\/ \u7dcf\u4ef6\u6570\u306e\u66f4\u65b0\n            document.getElementById('total-count').textContent = data.total;\n        } catch (error) {\n            console.error('Error fetching products:', error);\n            this.showError('\u5546\u54c1\u306e\u8aad\u307f\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f');\n        } finally {\n            this.hideLoader();\n        }\n    }\n\n    handleFilterChange() {\n        const category = document.getElementById('category-filter').value;\n        const [sort, direction] = document.getElementById('sort-filter').value.split('-');\n\n        this.filters.set('category', category);\n        this.filters.set('sort', sort);\n        this.filters.set('direction', direction);\n        this.filters.set('page', '1');  \/\/ \u30d5\u30a3\u30eb\u30bf\u30fc\u5909\u66f4\u6642\u306f1\u30da\u30fc\u30b8\u76ee\u306b\u623b\u308b\n\n        this.fetchProducts();\n    }\n\n    handlePageChange(page) {\n        this.filters.set('page', page);\n        this.fetchProducts();\n    }\n\n    showLoader() {\n        \/\/ \u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u8868\u793a\u306e\u5b9f\u88c5\n    }\n\n    hideLoader() {\n        \/\/ \u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u975e\u8868\u793a\u306e\u5b9f\u88c5\n    }\n\n    showError(message) {\n        \/\/ \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u8868\u793a\u306e\u5b9f\u88c5\n    }\n}\n\n\/\/ \u521d\u671f\u5316\nnew ProductFilter();<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3050\u306b\u6d3b\u7528\u3067\u304d\u308b\u5f62\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7121\u9650\u30b9\u30af\u30ed\u30fc\u30eb\u3084Ajax\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u91cd\u8981\u306a\u6a5f\u80fd\u3068\u306a\u308a\u307e\u3059\u3002\u5b9f\u88c5\u6642\u306f\u3001\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3084\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u72b6\u614b\u306e\u7ba1\u7406\u306b\u3082\u5341\u5206\u6ce8\u610f\u3092\u6255\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u30c6\u30b9\u30c8\u3068\u30c7\u30d0\u30c3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3067\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u691c\u8a3c\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ tests\/Feature\/PostPaginationTest.php\nnamespace Tests\\Feature;\n\nuse Tests\\TestCase;\nuse App\\Models\\Post;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass PostPaginationTest extends TestCase\n{\n    use RefreshDatabase;\n\n    public function test_pagination_displays_correct_number_of_items()\n    {\n        \/\/ \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u4f5c\u6210\n        Post::factory()-&gt;count(30)-&gt;create();\n\n        \/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u691c\u8a3c\n        $response = $this-&gt;get('\/posts');\n\n        $response-&gt;assertStatus(200)\n                -&gt;assertViewHas('posts')\n                -&gt;assertSee('Next');\n\n        \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30da\u30fc\u30b8\u30b5\u30a4\u30ba\uff0815\u4ef6\uff09\u3092\u78ba\u8a8d\n        $this-&gt;assertEquals(15, $response-&gt;viewData('posts')-&gt;count());\n    }\n\n    public function test_pagination_handles_last_page_correctly()\n    {\n        Post::factory()-&gt;count(22)-&gt;create();\n\n        \/\/ 2\u30da\u30fc\u30b8\u76ee\u306b\u30a2\u30af\u30bb\u30b9\n        $response = $this-&gt;get('\/posts?page=2');\n\n        $response-&gt;assertStatus(200);\n        $this-&gt;assertEquals(7, $response-&gt;viewData('posts')-&gt;count());\n    }\n\n    public function test_pagination_with_search_parameters()\n    {\n        \/\/ \u691c\u7d22\u7528\u306e\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u4f5c\u6210\n        Post::factory()-&gt;count(20)-&gt;create(['title' =&gt; 'Test Post']);\n        Post::factory()-&gt;count(10)-&gt;create(['title' =&gt; 'Different Title']);\n\n        $response = $this-&gt;get('\/posts?search=Test');\n\n        $response-&gt;assertStatus(200);\n        $this-&gt;assertEquals(15, $response-&gt;viewData('posts')-&gt;count());\n        $this-&gt;assertEquals(20, $response-&gt;viewData('posts')-&gt;total());\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>API\u7528\u306e\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30c6\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ tests\/Feature\/Api\/PostApiTest.php\nnamespace Tests\\Feature\\Api;\n\nuse Tests\\TestCase;\nuse App\\Models\\Post;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass PostApiTest extends TestCase\n{\n    use RefreshDatabase;\n\n    public function test_api_pagination_returns_correct_format()\n    {\n        Post::factory()-&gt;count(30)-&gt;create();\n\n        $response = $this-&gt;getJson('\/api\/posts');\n\n        $response-&gt;assertStatus(200)\n                -&gt;assertJsonStructure([\n                    'data' =&gt; [\n                        '*' =&gt; ['id', 'title', 'content']\n                    ],\n                    'links' =&gt; ['first', 'last', 'prev', 'next'],\n                    'meta' =&gt; [\n                        'current_page',\n                        'last_page',\n                        'per_page',\n                        'total'\n                    ]\n                ]);\n    }\n\n    public function test_cursor_pagination_works_correctly()\n    {\n        Post::factory()-&gt;count(50)-&gt;create();\n\n        $firstResponse = $this-&gt;getJson('\/api\/posts?cursor_pagination=1');\n        $firstCursor = $firstResponse-&gt;json('data')[14]['id'];  \/\/ 15\u756a\u76ee\u306e\u30a2\u30a4\u30c6\u30e0\u306eID\n\n        $secondResponse = $this-&gt;getJson(\"\/api\/posts?cursor={$firstCursor}\");\n\n        $secondResponse-&gt;assertStatus(200)\n                      -&gt;assertJsonCount(15, 'data');\n\n        \/\/ \u91cd\u8907\u304c\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\n        $firstIds = collect($firstResponse-&gt;json('data'))-&gt;pluck('id');\n        $secondIds = collect($secondResponse-&gt;json('data'))-&gt;pluck('id');\n        $this-&gt;assertTrue($firstIds-&gt;intersect($secondIds)-&gt;isEmpty());\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u4e00\u822c\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u30ed\u30b0\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30d0\u30c3\u30b0\u7528\u306e\u30af\u30a8\u30ea\u30ed\u30b0\u8a2d\u5b9a\nDB::connection()-&gt;enableQueryLog();\n\n$posts = Post::paginate(15);\n\n\/\/ \u5b9f\u884c\u3055\u308c\u305f\u30af\u30a8\u30ea\u306e\u78ba\u8a8d\ndd(DB::getQueryLog());<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a08\u6e2c\npublic function index()\n{\n    $start = microtime(true);\n\n    $query = Post::query();\n\n    \/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306e\u69cb\u7bc9\u3092\u8a08\u6e2c\n    $queryBuildTime = microtime(true) - $start;\n\n    $executionStart = microtime(true);\n    $posts = $query-&gt;paginate(15);\n    $executionTime = microtime(true) - $executionStart;\n\n    \/\/ \u30d3\u30e5\u30fc\u306e\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u6642\u9593\u3092\u8a08\u6e2c\n    $renderStart = microtime(true);\n    $view = view('posts.index', compact('posts'))-&gt;render();\n    $renderTime = microtime(true) - $renderStart;\n\n    \/\/ \u958b\u767a\u74b0\u5883\u3067\u306e\u307f\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u8868\u793a\n    if (config('app.debug')) {\n        $debugInfo = [\n            'query_build_time' =&gt; $queryBuildTime,\n            'query_execution_time' =&gt; $executionTime,\n            'view_render_time' =&gt; $renderTime,\n            'total_time' =&gt; microtime(true) - $start\n        ];\n\n        Log::debug('Pagination Performance', $debugInfo);\n    }\n\n    return $view;\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\uff1a\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af\u304c\u6b63\u3057\u304f\u52d5\u4f5c\u3057\u306a\u3044\n\/\/ \u89e3\u6c7a\uff1aURL\u306e\u751f\u6210\u65b9\u6cd5\u3092\u78ba\u8a8d\npublic function index()\n{\n    try {\n        $posts = Post::paginate(15);\n\n        \/\/ \u73fe\u5728\u306eURL\u30d1\u30b9\u3092\u78ba\u8a8d\n        $currentPath = request()-&gt;path();\n        Log::debug('Current Path', ['path' =&gt; $currentPath]);\n\n        \/\/ \u751f\u6210\u3055\u308c\u308bURL\u3092\u78ba\u8a8d\n        $urls = [\n            'first' =&gt; $posts-&gt;url(1),\n            'current' =&gt; $posts-&gt;url($posts-&gt;currentPage()),\n            'next' =&gt; $posts-&gt;nextPageUrl(),\n        ];\n        Log::debug('Generated URLs', $urls);\n\n        return view('posts.index', compact('posts'));\n    } catch (\\Exception $e) {\n        Log::error('Pagination Error', [\n            'message' =&gt; $e-&gt;getMessage(),\n            'trace' =&gt; $e-&gt;getTraceAsString()\n        ]);\n\n        return back()-&gt;with('error', '\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002');\n    }\n}<\/pre>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u30c7\u30d0\u30c3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u8a08\u753b\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>N+1\u554f\u984c\u306e\u691c\u51fa<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4e0d\u6b63\u306a\u30da\u30fc\u30b8\u756a\u53f7\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u691c\u7d22\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9069\u5207\u306a\u8868\u793a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u6642\u9593\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u8ffd\u8de1<\/li>\n\n\n\n<li>\u30ec\u30b9\u30dd\u30f3\u30b9\u30bf\u30a4\u30e0\u306e\u8a08\u6e2c<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u3068\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u306e\u4fe1\u983c\u6027\u3068\u6027\u80fd\u3092\u78ba\u4fdd\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9a\u671f\u7684\u306a\u30c6\u30b9\u30c8\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,12],"tags":[],"class_list":{"0":"post-2697","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php-laravel","7":"category-php","8":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2697"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2697\/revisions"}],"predecessor-version":[{"id":2699,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2697\/revisions\/2699"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}