5

Ho le tabelle Semesters, Disciplines e un JointTable Semesters_Disciplines. Voglio creare un indice di azione in DisciplinesController con un semester_id come parametro, che elenca con paginare solo le discipline ciò che appartiene al semestre con l'id passato nel parametro. Ho provato questo:Condizioni per impaginare per appartiene a CakeTemplice 3PHP 3

public function index($semester_id) 
{ 
    $options = ['semester_id' => $semester_id]; 
    $this->paginate = ['conditions' => $options]; 

    $this->set('disciplines', $this->paginate($this->Disciplines)); 
    $this->set('_serialize', ['disciplines']); 
} 
+0

Quali sono stati i risultati del test, e ciò che si è verificato che si è stati o non si aspettavano? – Milner

+0

Errore: SQLSTATE [42S22]: colonna non trovata: 1054 Colonna sconosciuta 'semesters_id' in 'clausola where' Bene ... le 'condizioni' accettano solo una condizione relativa al modello del controller ... – Luiz

risposta

15

Dovrete utilizzare una query che utilizza di corrispondenza o si unisce ad essere in grado di filtrare i non 1:1/n-1 associazioni.

È possibile farlo sia passando una query direttamente al paginate() metodo di

// ... 
$this->set('disciplines', $this->paginate(
    $this->Disciplines 
     ->find() 
     ->matching('Semesters', function(\Cake\ORM\Query $q) use ($semester_id) { 
      return $q->where([ 
       'Semesters.id' => $semester_id 
      ]); 
     }) 
     ->group(['Disciplines.id']) 
)); 
// ... 

o utilizzando un cercatore personalizzato.

// ... 
$this->paginate = [ 
    'finder' => [ 
     'semesters' => [ 
      'semester_id' => $semester_id 
     ] 
    ] 
]; 
$this->set('disciplines', $this->paginate($this->Disciplines)); 
// ... 
// DisciplinesTable 
public function findSemesters(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
     ->matching('Semesters', function(\Cake\ORM\Query $q) use ($options) { 
      return $q->where([ 
       'Semesters.id' => $options['semester_id'] 
      ]); 
     }) 
     ->group(['Disciplines.id']); 
    return $query; 
} 

Vedi anche

+0

Ho risolto il problema con la prima opzione! ty – Luiz

Problemi correlati