Я новичок в 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]