Pracuję z opcjami cakephp paginations przez 2 dni. Muszę utworzyć INNER Joins, aby wyświetlić kilka pól, ale muszę zajmować się wyszukiwaniem, aby filtrować wyniki. Jest to część kodu, w którym mam do czynienia z opcji wyszukiwania przez $this->passedArgs
function crediti() {
if(isset($this->passedArgs['Search.cognome'])) {
debug($this->passedArgs);
$this->paginate['conditions'][]['Member.cognome LIKE'] = str_replace('*','%',$this->passedArgs['Search.cognome']);
}
if(isset($this->passedArgs['Search.nome'])) {
$this->paginate['conditions'][]['Member.nome LIKE'] = str_replace('*','%',$this->passedArgs['Search.nome']);
}
i po
$this->paginate = array(
'joins' => array(array('table'=> 'reservations',
'type' => 'INNER',
'alias' => 'Reservation',
'conditions' => array('Reservation.member_id = Member.id','Member.totcrediti > 0'))),
'limit' => 10);
$this->Member->recursive = -1;
$this->paginate['conditions'][]['Reservation.pagamento_verificato'] = 'SI';
$this->paginate['fields'] = array('DISTINCT Member.id','Member.nome','Member.cognome','Member.totcrediti');
$members = $this->paginate('Member');
$this->set(compact('members'));
INNER JOIN działa dobrze, ale $ this-> paginations ignorować każdy $this->paginate['conditions'][] by $this->passedArgs
i nie mogę mieć pomysł jak mogę to rozwiązać. Brak zapytania w debugowaniu, tylko oryginalny INNER JOIN
. Czy ktoś może mi pomóc? Bardzo dziękuję
Aktualizacja: Nie ma szczęścia. Zajmuję się tą częścią kodu przez wiele godzin. Jeśli używam
if(isset($this->passedArgs['Search.cognome'])) {
$this->paginate['conditions'][]['Member.cognome LIKE'] = str_replace('*','%',$this->passedArgs['Search.cognome']);
}
$this->paginate['conditions'][]['Member.sospeso'] = 'SI';
$this->Member->recursive = 0;
$this->paginate['fields'] = array(
'Member.id','Member.nome','Member.cognome','Member.codice_fiscale','Member.sesso','Member.region_id',
'Member.district_id','Member.city_id','Member.date','Member.sospeso','Region.name','District.name','City.name');
$sospesi = $this->paginate('Member');
wszystko idzie dobrze, a od debugowania otrzymuję pierwszy stan i warunki z $this->paginate['conditions'][]['Member.cognome LIKE']
, jak widać tablicę $this->passedArgs
Array
(
[Search.cognome] => aiello
)
Array $this->paginate['conditions'][]
(
[0] => Array
(
[Member.cognome LIKE] => aiello
)
[1] => Array
(
[Member.sospeso] => NO
)
Ale jeśli piszę sprzężeń z paginacją, $this->paginate['conditions'][]
zignoruje wszystkie rzeczy i dasz mi z debugowania, tylko $this->paginate['conditions'][]['Reservation.pagamento_verificato'] = 'SI';
Kolejna porcja informacji. Jeśli wstawię wszystkie rzeczy związane z $this->paginate['conditions'][]['Reservation.pagamento_verificato'] = 'SI';
przed $this->paginate JOIN
, nic nie będzie w $this->paginate['conditions'][]
.
Jest rozwiązanie tego problemu tutaj: CakePHP 2.3.4 http://stackoverflow.com/questions/13645296/cakephp-paginate-conditions-on-join-table/ 16789816 # 16789816 –