je cherchais une réponse précédente, mais celles que j'ai trouvées sont liées aux anciennes versions de Cakephp
j'ai deux tables, 'magazines' et 'issues' où il y a une relation 'questions' appartient 'à' magazines ', voici à quoi ressemble IssuesTable:
public function initialize(array $config){
$this->belongsTo('Magazines', [
'foreignKey' => 'id'
]);
}
table magazines a deux champs, magazines.id et magazines.name
table issues a deux champs, issues.id, issues.magazine_id où issues.magazine_id est la clé étrangère
pour renseigner une entrée sélectionnée dans la vue des problèmes avec les valeurs magazine.name et enregistrer le numéro issues.magazine_id, j'ai configuré le contrôleur de la manière suivante
$this->set('magazines', $this->Issue->Magazine->find('list'));
alors j'ai ajouté le code suivant à la vue du problème add.cpt
<?php
echo $this->Form->input('name', [
'type' => 'select',
'multiple' => false,
'options' => $magazines,
'empty' => true]);
?>
mais je reçois l'entrée select avec les issues.magazine_id en tant que valeurs au lieu de magazines.name
merci pour votre aide et vos commentaires
Vous voulez utiliser find('list')
car ceci retournera la clé primaire et le champ d'affichage: -
$this->set(
'magazines',
$this->Issues->Magazines->find('list')
);
Ensuite, dans votre formulaire, vous devez indiquer le nom de l'entrée magazine_id
si vous souhaitez définir la clé étrangère de l'association: -
echo $this->Form->input(
'magazine_id',
[
'type' => 'select',
'multiple' => false,
'options' => $magazines,
'empty' => true
]
);
Voir le docs pour plus d’informations.
Mise à jour
Si vous rencontrez des problèmes avec find('list')
, c'est peut-être parce que la variable displayField
de votre modèle n'est pas correctement définie. Cake détermine normalement la displayField
du modèle à l’initialisation. Si cela ne fonctionne pas ou si vous voulez un autre champ, vous pouvez le définir manuellement dans la méthode initialize()
du modèle. Par exemple.:-
class MagazinesTable extends Table
{
public function initialize(array $config)
{
$this->displayField('name');
}
}
Changer 'name'
dans le champ approprié.
Vous pouvez également choisir le champ que Cake utilisera pour les valeurs renvoyées par find('list')
(cela est particulièrement utile lorsque vous souhaitez remplacer la valeur par défaut displayField
). Par exemple.:-
$this->Issues->Magazines->find('list', [
'keyField' => 'id',
'valueField' => 'name'
]);
Affiche l'option sélectionnée dans l'aide mensuelle
$this->Form->month('students.month', [
'label' => false,
'value'=>date('m'),
'required'=>true
]);