2012-11-06 11 views
5

Ho due tabelle denominate calendar_colour e l'utente,complesso CakePHP trovare "NOT IN"

calendar_colour 
(
    colour_id int primary key, 
    colour varchar(15) 
) 


user 
(
    id int primary key, 
    name varchar(30), 
    color int, 
    foreign key(color) references calendar_colour(colour_id) 
) 

Nella funzione aggiunta dell'utente devo scegliere un colore da una casella a discesa. Ma voglio popolare il menu a discesa utilizzando i colori che non sono già stati presi dagli utenti precedenti. Ho provato a usare un comando di ricerca ma sembra sbagliato.

$curColours = $this->EventType->query('select color from event_types'); 

$this->set('colours', $this->EventType->CalendarColour->find('list',array('conditions'=>array('NOT',array('CalendarColour.colour_id' => $curColours))))); 

Io uso la matrice $colours per popolare la casella a discesa. Qual è il modo corretto di scrivere il comando find che trova i colori che non sono utilizzati da nessun utente.

Grazie.

+0

potrei suggerire di usare più righe di scrivere qualsiasi tipo di query? Come ho fatto nella mia risposta. Rende solo più facile da capire :) – Ariaan

risposta

13

È quasi avuta:

$this->EventType->CalendarColour->find('list', array(
    'conditions' => array(
    'NOT' => array(// There's your problem! :) 
     'CalendarColour.colour_id' => $curColours 
    ) 
) 
)); 
+0

Grazie che ha funzionato in misura! Ma ho ricevuto un errore che diceva la colonna sconosciuta "Array" quando ho aggiunto un utente e poi ho provato ad aggiungerne un altro. – user1563210