Я взломал это уже несколько часов. Прочитайте о 7 или 8 онлайн-учебниках, и я все еще не могу заставить свою нумерацию страниц работать с моими результатами поиска.
Вот основы ситуации:
В моем plan_controller я вызываю это в моей функции поискового запроса
$this->set('plans', $this->Plan->find('all', $options));
Самый близкий я (который не выдавал ошибки SQL) выполнил
$this->set('plans', $this->Plan->find('all', $options), $this->paginate());
ПРИМЕЧАНИЕ: $ options - это фактические соединения и условия поискового запроса (и запрос работает без пагинации).
Но вышеупомянутое не помогло перенести поисковый запрос на следующие страницы и даже не сработало с первым набором результатов поиска.
Использование нумерации страниц для моих нужд кажется очень сложным с CakePHP, но в этой теме я надеюсь на более округлое объяснение, с которого я должен начать работать (и любые другие простые, но эффективные советы приветствуются:)). *
Я впервые пробую этот тип сложной нумерации страниц.
Вот весь код моего контроллера. Вы увидите, что многое из этого неприменимо, но все еще пытаетесь решить эту проблему.
var $name = 'Plans';
function beforeFilter() {
$this->Auth->allow('search','index'); }
function search() {
$this->Plan->recursive = 2;
if(isset($this->data['Plan']['ApplicantAge'])) {
$ApplicantAge = $this->data['Plan']['ApplicantAge'];
} else {
$ApplicantAge = 25;
}
if(isset($this->data['Plan']['SpouseAge'])) {
$SpouseAge = $this->data['Plan']['SpouseAge'];
} else {
$SpouseAge = 0;
}
if(isset($this->data['Plan']['NumberChildren'])) {
$NumberChildren = $this->data['Plan']['NumberChildren'];
} else {
$NumberChildren = 0;
}
if(isset($this->data['Plan']['Vision'])) {
$Vision = $this->data['Plan']['Vision'];
} else {
$Vision = 0;
}
if(isset($this->data['Plan']['ZipCode'])) {
$Zip = $this->data['Plan']['ZipCode'];
} else {
$Zip = 0;
}
$memberCount = 1; //We can assume the applicant is there
if($SpouseAge > 0) {
$memberCount += 1;
}
if($NumberChildren > 0) {
$memberCount += $NumberChildren;
}
//2: Combo plan (1 adult + children, 1 adult + spouse + children)
$comboType = 'sa';
if($ApplicantAge < 18) {
//$comboType = 'sc';
}
if($SpouseAge > 0) {
if($NumberChildren > 0) {
$comboType = 'asc';
} else {
$comboType = 'as';
}
} else {
if($NumberChildren > 0) {
$comboType = 'ac';
}
}
$options = array(
'joins' => array (
array(
'table' => 'plans_zips',
'alias' => 'PZips',
'type' => 'inner',
'foreignKey' => false,
'conditions'=> array('Plan.id = PZips.plan_id')
),
array(
'table' => 'zips',
'alias' => 'Zips',
'type' => 'inner',
'foreignKey' => false,
'conditions'=> array('Zips.id = PZips.zip_id')
)
),
'conditions' => array(
"AND" => array(
array($ApplicantAge . ' BETWEEN Age.Min_Age AND Age.Max_age'),
'Zips.title' => $Zip,
'Applicant.amount' => array($comboType, $memberCount),
'PlanDetail.active' => 1)
)
);
$queryStr = "SELECT Plan.* FROM plans AS Plan ";
$queryStr = $queryStr . "INNER JOIN ages on age_id = ages.id ";
$queryStr = $queryStr . "INNER JOIN applicants on applicant_id = applicants.id ";
$queryStr = $queryStr . "WHERE (applicants.amount = '". $memberCount . "' OR applicants.amount = '" . $comboType . "')";
$queryStr = $queryStr . " AND (". $ApplicantAge . " BETWEEN ages.Min_Age+0 AND ages.Max_Age+0) ";
$queryStr = $queryStr . " AND Plan.id IN (SELECT plan_id FROM plans_zips where zip_id = (SELECT id FROM zips WHERE title = '". $Zip. "'))";
//Add the vision limiting item
if($Vision == 1) {
$queryStr = $queryStr . " AND dental_cost > 0";
array_push($options['conditions'], "dental_cost > 0");
}
//$this->set('plans', $this->Plan->find('all', $options));
$this->paginate = $options;
$plans = $this->paginate();
$this->set(compact('plans'));
}