From 0068d2047efa55cd8f584fb7473c0dd3370fd53e Mon Sep 17 00:00:00 2001 From: kenjis Date: Fri, 16 Jun 2023 09:00:36 +0900 Subject: [PATCH 1/4] docs: add sub section titles --- user_guide_src/source/database/queries.rst | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/user_guide_src/source/database/queries.rst b/user_guide_src/source/database/queries.rst index 35d8c5ad08df..b3904418b8a6 100644 --- a/user_guide_src/source/database/queries.rst +++ b/user_guide_src/source/database/queries.rst @@ -15,11 +15,16 @@ Query Basics Regular Queries =============== -To submit a query, use the **query** function: +.. _db-query: + +$db->query() +------------ + +To submit a query, use the ``query()`` method: .. literalinclude:: queries/001.php -The ``query()`` function returns a database result **object** when "read" +The ``query()`` method returns a database result **object** when "read" type queries are run which you can use to :doc:`show your results `. When "write" type queries are run it simply returns true or false depending on success or failure. When retrieving @@ -34,6 +39,11 @@ this: Simplified Queries ================== +.. _db-simplequery: + +$db->simpleQuery() +------------------ + The ``simpleQuery()`` method is a simplified version of the ``$db->query()`` method. It DOES NOT return a database result set, nor does it set the query timer, or From 8bae53b7dc06bd11530d8b8c3b24c47662eea3a9 Mon Sep 17 00:00:00 2001 From: kenjis Date: Fri, 16 Jun 2023 09:01:03 +0900 Subject: [PATCH 2/4] docs: improve explanation about Model pagination --- .../source/libraries/pagination.rst | 29 ++++++++++++++++--- .../source/libraries/pagination/003.php | 3 +- .../source/libraries/pagination/016.php | 20 +++++++++++++ 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 user_guide_src/source/libraries/pagination/016.php diff --git a/user_guide_src/source/libraries/pagination.rst b/user_guide_src/source/libraries/pagination.rst index a32e88fdb378..17a9f02985f4 100644 --- a/user_guide_src/source/libraries/pagination.rst +++ b/user_guide_src/source/libraries/pagination.rst @@ -39,13 +39,34 @@ The first element is the results from the database, **users**, which is retrieve the Model will hold on to the instance it used and store it in the public property, ``$pager``. So, we grab that and assign it to the ``$pager`` variable in the view. -.. important:: It is important to understand that the ``Model::paginate()`` method uses the **Model** and **QueryBuilder** methods. - Therefore, trying to use ``$db->query()`` and ``Model::paginate()`` **will not work** because ``$db->query()`` executes - the query immediately and is not associated with a QueryBuilder. +Customizing Query for Pagination +================================ -To define conditions for pagination in a model, you can: +To customize a query for pagination in a model, you can add +:doc:`Query Builder <../database/query_builder>` methods before ``paginate()`` +method. + +To add WHERE conditions: .. literalinclude:: pagination/003.php + :lines: 2- + +You can join another table: + +.. literalinclude:: pagination/016.php + :lines: 2- + +.. important:: It is important to understand that the ``Model::paginate()`` method + uses the **Model** and the **Query Builder** instance in the Model. + Therefore, trying to use ``Model::paginate()`` with :ref:`db-query` + **will not work** because ``$db->query()`` executes the query immediately + and is not associated with the Query Builder. + +If you need a complicated SQL query that you cannot write with Query Builder, +try using :ref:`db-query` and `Manual Pagination`_. + +Displaying Pager Links +====================== Within the view, we then need to tell it where to display the resulting links:: diff --git a/user_guide_src/source/libraries/pagination/003.php b/user_guide_src/source/libraries/pagination/003.php index 423adc232c19..b6bd2cd415f1 100644 --- a/user_guide_src/source/libraries/pagination/003.php +++ b/user_guide_src/source/libraries/pagination/003.php @@ -9,9 +9,10 @@ ]; // You can move the conditions to a separate method. -// Model method class UserModel extends Model { + // ... + public function banned() { $this->builder()->where('ban', 1); diff --git a/user_guide_src/source/libraries/pagination/016.php b/user_guide_src/source/libraries/pagination/016.php new file mode 100644 index 000000000000..b867b2243a77 --- /dev/null +++ b/user_guide_src/source/libraries/pagination/016.php @@ -0,0 +1,20 @@ +builder() + ->select('news.*, category.name') + ->join('category', 'news.category_id = category.id'); + + return [ + 'news' => $this->paginate($perPage), + 'pager' => $this->pager, + ]; + } +} From 30bda4ff1dd1481bcda7085a94613e8cbc21027f Mon Sep 17 00:00:00 2001 From: kenjis Date: Sat, 17 Jun 2023 09:12:34 +0900 Subject: [PATCH 3/4] docs: replace Controller with BaseController --- user_guide_src/source/libraries/pagination/002.php | 4 +--- user_guide_src/source/libraries/pagination/004.php | 4 +--- user_guide_src/source/libraries/pagination/015.php | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/user_guide_src/source/libraries/pagination/002.php b/user_guide_src/source/libraries/pagination/002.php index c8cd31ebec5c..c1bc432220d8 100644 --- a/user_guide_src/source/libraries/pagination/002.php +++ b/user_guide_src/source/libraries/pagination/002.php @@ -2,9 +2,7 @@ namespace App\Controllers; -use CodeIgniter\Controller; - -class UserController extends Controller +class UserController extends BaseController { public function index() { diff --git a/user_guide_src/source/libraries/pagination/004.php b/user_guide_src/source/libraries/pagination/004.php index 75eb88c3e409..a8ef4d296125 100644 --- a/user_guide_src/source/libraries/pagination/004.php +++ b/user_guide_src/source/libraries/pagination/004.php @@ -2,9 +2,7 @@ namespace App\Controllers; -use CodeIgniter\Controller; - -class UserController extends Controller +class UserController extends BaseController { public function index() { diff --git a/user_guide_src/source/libraries/pagination/015.php b/user_guide_src/source/libraries/pagination/015.php index e6ea3e86ca87..ac9f4fc430f0 100644 --- a/user_guide_src/source/libraries/pagination/015.php +++ b/user_guide_src/source/libraries/pagination/015.php @@ -2,9 +2,7 @@ namespace App\Controllers; -use CodeIgniter\Controller; - -class UserController extends Controller +class UserController extends BaseController { public function index() { From 041d2bc7cd2dfccd1cf0128f9980301cddd0147f Mon Sep 17 00:00:00 2001 From: kenjis Date: Sat, 17 Jun 2023 09:13:23 +0900 Subject: [PATCH 4/4] docs: improve sample code and description --- .../source/libraries/pagination.rst | 16 +++++++++++++-- .../source/libraries/pagination/003.php | 20 +------------------ .../source/libraries/pagination/016.php | 4 ++++ .../source/libraries/pagination/017.php | 17 ++++++++++++++++ .../source/libraries/pagination/018.php | 9 +++++++++ 5 files changed, 45 insertions(+), 21 deletions(-) create mode 100644 user_guide_src/source/libraries/pagination/017.php create mode 100644 user_guide_src/source/libraries/pagination/018.php diff --git a/user_guide_src/source/libraries/pagination.rst b/user_guide_src/source/libraries/pagination.rst index 17a9f02985f4..3cf6f01dadbb 100644 --- a/user_guide_src/source/libraries/pagination.rst +++ b/user_guide_src/source/libraries/pagination.rst @@ -46,15 +46,27 @@ To customize a query for pagination in a model, you can add :doc:`Query Builder <../database/query_builder>` methods before ``paginate()`` method. -To add WHERE conditions: +Adding WHERE +------------ + +If you want to add WHERE conditions, you can specify conditions directly: .. literalinclude:: pagination/003.php :lines: 2- +You can move the conditions to a separate method: + +.. literalinclude:: pagination/017.php + +.. literalinclude:: pagination/018.php + :lines: 2- + +Adding JOIN +----------- + You can join another table: .. literalinclude:: pagination/016.php - :lines: 2- .. important:: It is important to understand that the ``Model::paginate()`` method uses the **Model** and the **Query Builder** instance in the Model. diff --git a/user_guide_src/source/libraries/pagination/003.php b/user_guide_src/source/libraries/pagination/003.php index b6bd2cd415f1..6ea631c7a9bc 100644 --- a/user_guide_src/source/libraries/pagination/003.php +++ b/user_guide_src/source/libraries/pagination/003.php @@ -1,27 +1,9 @@ $model->where('ban', 1)->paginate(10), 'pager' => $model->pager, ]; - -// You can move the conditions to a separate method. -class UserModel extends Model -{ - // ... - - public function banned() - { - $this->builder()->where('ban', 1); - - return $this; // This will allow the call chain to be used. - } -} - -$data = [ - 'users' => $model->banned()->paginate(10), - 'pager' => $model->pager, -]; diff --git a/user_guide_src/source/libraries/pagination/016.php b/user_guide_src/source/libraries/pagination/016.php index b867b2243a77..64be257b4152 100644 --- a/user_guide_src/source/libraries/pagination/016.php +++ b/user_guide_src/source/libraries/pagination/016.php @@ -1,5 +1,9 @@ builder()->where('ban', 1); + + return $this; // This will allow the call chain to be used. + } +} diff --git a/user_guide_src/source/libraries/pagination/018.php b/user_guide_src/source/libraries/pagination/018.php new file mode 100644 index 000000000000..002d034a643c --- /dev/null +++ b/user_guide_src/source/libraries/pagination/018.php @@ -0,0 +1,9 @@ + $model->banned()->paginate(10), + 'pager' => $model->pager, +];