2015-06-19 6 views
7

ero alla ricerca di una risposta precedente, ma quelli che ho trovato sono relative a versioni più vecchie CakePHPcakephp 3.0 come popolare un campo di selezione con i valori anziché id

ho due tabelle, 'riviste' e 'problemi' in cui v'è una relazione 'problemi' Pertinenti 'riviste', questo è ciò che appare come IssuesTable:

public function initialize(array $config){ 

$this->belongsTo('Magazines', [ 
    'foreignKey' => 'id' 
]); 
} 

riviste tabella ha due campi, magazines.id e magazines.name

questioni tavolo ha due campi, issues.id, issues.magazine_id dove issues.magazine_id è t egli estera chiave

popolare un selezione ingresso nelle questioni visualizzare i valori magazine.name e salvare l'issues.magazine_id, ho impostato il controller come questo

$this->set('magazines', $this->Issue->Magazine->find('list')); 

poi ho aggiunto il codice seguente alla vista problema add.cpt

<?php 
    echo $this->Form->input('name', [ 
    'type' => 'select', 
    'multiple' => false, 
    'options' => $magazines, 
    'empty' => true]); 
    ?> 

ma ottengo selezionare l'ingresso con l'issues.magazine_id come valori invece di magazines.name

grazie per il vostro aiuto di un d commenti

+0

si desidera trovare problemi con per una rivista di concreto, ho ragione? – Balder

+0

no, voglio selezionare una rivista in calcestruzzo da una selezione di input, dove i valori sono il nome della rivista ma memorizza l'id. Non riesco a trovare come pupulare l'input selezionare con magazine_name invece dell'id –

risposta

15

Si desidera utilizzare find('list') come questo restituirà la chiave primaria e campo di visualizzazione: -

$this->set(
    'magazines', 
    $this->Issues->Magazines->find('list') 
); 

Poi, nel modulo è necessario il nome dell'ingresso di essere magazine_id se hai intenzione di impostare la chiave esterna per l'associazione: -

echo $this->Form->input(
    'magazine_id', 
    [ 
     'type' => 'select', 
     'multiple' => false, 
     'options' => $magazines, 
     'empty' => true 
    ] 
); 

Vedere la docs per maggiori informazioni.

Aggiornamento

Se stai riscontrando problemi con find('list') è forse perché del vostro modello displayField non è sempre impostato correttamente. Cake normalmente determina il displayField per il modello all'inizializzazione. Se questo non funziona o si desidera un campo diverso, è possibile impostarlo manualmente nel metodo initialize() del modello. Es.: -

class MagazinesTable extends Table 
{ 

    public function initialize(array $config) 
    { 
     $this->displayField('name'); 
    } 
} 

Modifica 'name' al campo appropriato.

In alternativa, è possibile scegliere il campo che verrà utilizzato da Cake per i valori restituiti da find('list') (ciò è particolarmente utile quando si desidera sovrascrivere il valore predefinito displayField). Es.: -

$this->Issues->Magazines->find('list', [ 
    'keyField' => 'id', 
    'valueField' => 'name' 
]); 
+0

grazie a @drmonkeyninja, c'è qualcosa che mi manca o non sto spiegando bene, perché quello che ottengo è un input popolato con la chiave (magazine.id) invece il valore (magazine.name) –

+0

@RaulMagdalenaCatala come si presenta la variabile '$ magazines'? Se chiami 'debug ($ this-> Issues-> Magazines-> find ('list') -> toArray())' nel tuo controller vedi una serie di nomi di riviste indicizzati dai loro ID? Forse il tuo modello di Magazines non è configurato correttamente? – drmonkeyninja

+0

no, questo è wat ottengo: [ \t (int) 1 => (int) 1, \t (int) 2 => (int) 2, \t (int) 4 => (int) 4 ] –

0

visualizzazione dell'opzione selezionata nel mese aiutante

$this->Form->month('students.month', [ 
'label' => false, 
'value'=>date('m'), 
'required'=>true 
]); 
Problemi correlati