CakePhp 3.6: (ОБНОВЛЕНИЕ: проблема Paginator) показать сетку путем объединения таблиц - PullRequest
0 голосов
/ 08 октября 2018

Я новичок в CakePHP и пытаюсь понять его логику.Итак,

У меня есть 3 таблицы в моей базе данных:

customers[id, name, surname, phone, text, balance, created]

service_types[id, title, price, length, is_subscription, created]

customer_service_types[id, customer_id, service_type_id, price, created]

Я хочу создать новый view, чтобы вывести список всех Expiring Services, который будет содержать 3 столбца: Customer | Service Type | Exp DateПо заказу Exp Date сначала будет услуга, срок действия которой истекает раньше.(Exp Exp будет рассчитываться по длине service_type и дате создания customer_service_types)

Нужно ли создавать новую таблицу в базе данных и заполнять ее каждый день?Или я могу создать что-то вроде слушателя, чтобы при открытии этой страницы сетка заполнялась joins в существующих таблицах без создания новой таблицы базы данных?

EDIT v2

Пока я жду ответа, я создал файл Template/ExpiringServices/index.ctp:

<h3><?= __('Expiring Services') ?></h3>
    <table cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <th scope="col"><?= $this->Paginator->sort('customer') ?></th>
                <th scope="col"><?= $this->Paginator->sort('service type') ?></th>
                <th scope="col"><?= $this->Paginator->sort('expiring_date') ?></th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($expiringServices as $expiringService): ?>
            <tr>
                <td><?= h($expiringService["customer"]) ?></td>
                <td><?= h($expiringService["title"]) ?></td>
                <td><?= h($expiringService["expiring_date"]) ?></td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    <div class="paginator">
        <ul class="pagination">
            <?= $this->Paginator->first('<< ' . __('first')) ?>
            <?= $this->Paginator->prev('< ' . __('previous')) ?>
            <?= $this->Paginator->numbers() ?>
            <?= $this->Paginator->next(__('next') . ' >') ?>
            <?= $this->Paginator->last(__('last') . ' >>') ?>
        </ul>
        <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
    </div>

и файл Controller/ExpiringServicesController.php:

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Datasource\ConnectionManager;

/**
 * ServiceTypes Controller
 *
 * @property \App\Model\Table\ServiceTypesTable $ServiceTypes
 *
 * @method \App\Model\Entity\ServiceType[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = [])
 */
class ExpiringServicesController extends AppController
{

    /**
     * Index method
     *
     * @return \Cake\Http\Response|void
     */
    public function index()
    {
        $conn = ConnectionManager::get('default');
        $stmt = $conn->execute('SELECT c.id as customerid, CONCAT(c.name, " ", c.surname) as customer, s.title as title, s.length, cs.created , DATE_ADD(cs.created, INTERVAL s.length DAY) as expiring_date
                            FROM customers c 
                            JOIN customer_service_types cs on c.id = cs.customer_id
                            JOIN service_types s on cs.service_type_id = s.id
                            WHERE s.is_subscription = 1
                            ORDER BY expiring_date');
        //debug($stmt,true);
        $expiringServices = $stmt->fetchAll('assoc');
        //debug($expiringServices,true);
        $this->set(compact('expiringServices'));
    }

}

Но Paginator не работает.Я получаю следующие ошибки:

Примечание (8): неопределенный индекс: pageCount [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 1015]

Примечание (8):Неопределенный индекс: pageCount [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 760]

Примечание (8): Неопределенный индекс: pageCount [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 1075]

Примечание (8): неопределенный индекс: pageCount [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 686] Примечание (8): неопределенный индекс: страница [CORE \ src \ View \ Helper \PaginatorHelper.php, строка 700]

Примечание (8): неопределенный индекс: текущий [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 702] Примечание (8): неопределенный индекс: count [CORE \src \ View \ Helper \ PaginatorHelper.php, строка 703] Примечание (8): неопределенный индекс: начало [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 704]

Примечание (8): не определеноindex: end [CORE \ src \ View \ Helper \ PaginatorHelper.php, строка 705]

...