cakephp 3.0 comment remplir un champ select avec des valeurs au lieu de l'id
je cherchais une réponse précédente, mais ceux que j'ai trouvés sont liées à d'anciennes cakephp versions
j'ai deux tables, les "magazines" et les "questions" où il y a un lien "questions" BelongsTo des "revues", c'est ce que IssuesTable ressemble:
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
table des magazines a deux champs, des magazines.id et les magazines.nom
table des questions a deux champs, des questions.id, questions.magazine_id où les enjeux.magazine_id est la clé étrangère
pour remplir une sélection à l'entrée dans les problèmes de vue avec le magazine.nom de valeurs et d'enregistrer les questions.magazine_id, j'ai réglé le contrôleur comme ce
$this->set('magazines', $this->Issue->Magazine->find('list'));
puis j'ai ajouté le code suivant à la question ajouter.cpt
<?php
echo $this->Form->input('name', [
'type' => 'select',
'multiple' => false,
'options' => $magazines,
'empty' => true]);
?>
mais je reçois la sélection de l'entrée avec les questions.magazine_id comme des valeurs au lieu de magazines.nom
merci pour votre aide et vos commentaires
non, je veux choisir un béton magazine à partir d'une sélection de l'entrée, où les valeurs sont le nom du magazine, mais il stocke l'id. Je ne trouve pas comment pupulate la sélection de l'entrée avec le magazine_name au lieu de l'id
OriginalL'auteur Raul Magdalena Catala | 2015-06-19
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser
find('list')
comme ce sera le retour de la clé primaire et le champ d'affichage:-Puis dans votre formulaire, vous devez le nom de l'entrée à
magazine_id
si vous êtes désireux de définir la clé étrangère de l'association:-Voir le docs pour plus d'info.
Mise à jour
Si vous rencontrez des problèmes avec
find('list')
c'est peut-être à cause de votre modèledisplayField
n'est pas configuré correctement. Gâteau détermine habituellement ledisplayField
pour le modèle lors de l'initialisation. Si ce n'est pas le travail, ou vous voulez un autre champ, vous pouvez définir manuellement dans le modèle deinitialize()
méthode. E. g.:-Changer
'name'
pour le champ approprié.Alternativement, vous pouvez choisir le champ de Gâteau à utiliser pour les valeurs retournées par
find('list')
(ceci est particulièrement utile lorsque vous voulez remplacer la valeur par défautdisplayField
). E. g.:-quel est votre
$magazines
variable? Si vous appelezdebug($this->Issues->Magazines->find('list')->toArray())
dans votre contrôleur voyez-vous un tableau de noms magazine indexés par leur Id? Peut-être vos Magazines modèle n'est pas correctement configurée?non, c'est le wat j'obtiens: [ (int) 1 =>, (int) 1, (int) 2 =>, (int) 2, (int) 4 =>, (int) 4 ]
sonne comme le
displayField
n'est pas configuré correctement. J'ai mis à jour ma réponse avec les deux options qui devraient résoudre le problème.$this->Issues->Magazines->find('list', [ 'keyField' => 'id', 'valueField' => 'name' ]);
Que c'était ce que je cherchais. Je vous remercie.OriginalL'auteur drmonkeyninja
Affichage de l'option sélectionnée dans le mois helper
OriginalL'auteur Dinesh Vaitage