J'ai Dans mon fichier code> docteur code>, j'ai cette relation: p> maintenant lors de la soumission de formulaire, je reçois cette erreur: p> J'ai essayé d'ajouter à ma relation J'ai vérifié les données soumises et médecin code> et
spécialisation code> table et avoir
doctor_specialization_pivot code> table. Dans ma table pivot, j'ai les colonnes suivantes:
| doctor_id | supplémentaire_data | Spécialisation_id |
code> p>
supplémentaire_data code> est du modèle code> Médecin code> avec le
doctor_id code>. P>
sqlstate [HY000]: Erreur générale: 1364 Champ 'supplémentaires_Data' n'a pas de valeur par défaut (SQL: Insert dans le doctor_specialization_pivot (doctor_id, spécialisations_id) valeurs (1, 3)) " code> < / p>
'pivot' => ['"supplémentaire_data'] code>. Mais toujours obtenir la même erreur. P>
additionnel_data code> n'est pas vide. J'ai vérifié des forums d'octobercms mais ne recevez pas de réponses directes telles que Ceci et Ce . P> p>
3 Réponses :
d'accord. J'ai trouvé la réponse à ma propre question.
Je vais répondre en détail pour aider tout le monde. Après avoir creusé et aveugle. Selon cette documentation ici , nous pouvons utiliser le méthode Qu'est-ce qui me confondre dans le La documentation est que cela utilise un échantillon de la liaison: P> joindre () code> pour joindre un rôle à un utilisateur en insérant un enregistrement dans la table intermédiaire qui rejoint les modèles em>. P>
$ vagabide code> variable et je n'ai pas compris où le
$ ROOKID code> est venu de. Si c'est le
ID code> de la table parent ou du
ID code> d'une autre table. P>
public function beforeSave()
{
$this->specialization()->attach($this->specialization,['additional_data' => 'additional data from doctor table']);
}
Le $ ROOKID CODE> est le numéro d'identification de l'enregistrement (dans cet exemple le modèle de rôles) que vous souhaitez attacher au modèle parent. Vous pouvez donc faire
$ rôle-> utilisateurs () -> joindre ($ userid) code> dans inverse. Hypothétiquement. Savez-vous cela dans le backend? Ou avez-vous une extrémité avant et utilisez-vous le code PHP ou une fonction de composant? Ceci n'est jamais expliqué dans votre question et les deux auraient une réponse différente.
J'utilise un builderPlugin pour cela, je n'ai rien changé de sauvegarde, c'est juste la valeur par défaut des octobercms. J'ai un problème avec ma réponse. Lorsque je mettez à jour mon formulaire et modifié la valeur du spécialty_id code> dans le formulaire. Au lieu de mettre à jour l'enregistrement de table pivot, il insère un nouvel enregistrement peut-être dû à
joindre () code> méthode. Donc, je cherche une réponse différente peut-être que quelqu'un pourrait.
Vous enregistrez donc les enregistrements dans le backend comme exemple.com/backend/plugin/model/create|update code>. Oui, je travaille sur une réponse pour vous entre le travail. Besoin de regarder mes notes.
La mise en œuvre est à peu près comme Cette vidéo de la montre apprendre (ivan). Vous pouvez apprendre beaucoup sur OctoberCMs simplement en surveillant son guide dessus. Voici le Documentation sur elle aussi. Ceci est l'exemple des informations que j'ai faites.
voici mon voici mon voici mon Model.php Code> relation: p> < Pré> xxx pré>
contrôleur.php code>: p>
config_relation.yaml Code>: p>
J'ai regardé la vidéo et c'est très utile. Mais je pense que le lien était davantage sur la gestion / l'affichage de la relation dans le backend. Mon problème est que lorsque l'utilisateur soumettez un formulaire, je souhaite enregistrer une valeur supplémentaire à partir du formulaire à la table de relation dans la base de données. La réponse que j'avais résolue l'ajout mais doit travailler sur cette question de la mise à jour. Nous avons un problème similaire avec celui-ci Stackoverflow.com/Questtions/50241697/... qui n'a pas encore de réponse.
Je vérifie l'événement Beforeattach dans la documentation mais je n'ai pas pu trouver Un moyen de modifier les attributs (ou d'ajouter ['supplémentaires_data' => 'Mes données'] code> avant de l'enregistrer dans la base de données ..
Je vous ai demandé si vous utilisez le backend pour soumettre ces informations. Vous devez montrer comment les utilisateurs soumettent le formulaire, comme le code PHP que vous utilisez. Votre question manque d'informations maintenant.
Je vais juste faire une nouvelle réponse et supposer est ce dont vous avez besoin car vous n'avez pas encore montré à n'importe quel code sur la façon dont votre formulaire fonctionne. Voici comment je voudrais mettre à jour les informations de pivot à partir d'un formulaire frontal.
relation dans puis dans un code PHP Permet de l'appeler maintenant un exemple de mise à jour de nos données supplémentaires: p> modèle.php code>: p>
Onaddspecialization () code>: p>
public function onUpdateAdditionalData() {
//Calling a function to get the doctor id maybe from the signed in user
$doctor = Doctors::find($this->$doctorId());
//If you get specialization by id from an input. I believe you need to go through the relationship in order to access the correct pivot information.
$specialization = $doctor->specialization->where('id', Input::get('specialization_id'))->first();
//Insert the new pivot information
$specialization->pivot->additional_data = $new_additional_data;
//Save
$specialization->pivot->save();
}
Pouvez-vous mentionner comment vous sauvegardez ces données? Sous une forme frontale ou un formulaire de contrôleur d'extrémité backend?
Pouvez-vous également nous montrer ce que vous voulez dire que le "supplémentaire_data n'est pas vide" ??