J'ai un problème lorsque j'utilise la méthode Trouver () en symfony:
PODEEXCEPTION: SQLSTATE [42S22]: Colonne non trouvée: 1054 Colonne inconnue 'T10.Id' in 'on Clause' P> blockQuote>
Ce n'est qu'avec une entité spécifique, avec les autres que cela fonctionne parfaitement. p>
ici mon code: p>
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\ClasseRepository") */ class Classe { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $name; /** * @ORM\ManyToOne(targetEntity="App\Entity\Formation", inversedBy="classe") */ private $formation; /** * @ORM\OneToOne(targetEntity="App\Entity\Calendar", mappedBy="classe", cascade={"persist", "remove"}) */ private $calendar; /** * @ORM\ManyToOne(targetEntity="App\Entity\person", inversedBy="classes") */ private $responsable; public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getFormation(): ?Formation { return $this->formation; } public function setFormation(?Formation $formation): self { $this->formation = $formation; return $this; } public function __toString() { return $this->name; } public function getCalendar(): ?Calendar { return $this->calendar; } public function setCalendar(?Calendar $calendar): self { $this->calendar = $calendar; // set (or unset) the owning side of the relation if necessary $newClasse = $calendar === null ? null : $this; if ($newClasse !== $calendar->getClasse()) { $calendar->setClasse($newClasse); } return $this; } public function getResponsable(): ?person { return $this->responsable; } public function setResponsable(?person $responsable): self { $this->responsable = $responsable; return $this; } }
5 Réponses :
essayez de trouver avec ou fort> p>
et avez-vous à jour votre code> code>: p>
Après cela, essayez à nouveau. P> Espace de noms code>: p>
$ classeid = $ _post ['classeid'] ?? 1; code> p>
$ classeid = $ demande-> demande-> obtenir ('classeid', 1) code>; // par défaut votre identifiant = 1 p>
$ ceci-> getdoctrine () -> gettrepository (app \ entité \ classe :: classe) -> trouver ($ classeid); code> p> p>
DOCTRINE: SCHEMA: MISE À JOUR CODE> P>
Tout d'abord, vous n'aviez pas d'utiliser directement $ directement, mais vous devez utiliser la demande comme celle-là. Peut-être que votre identifiant insanitué est le problème. P> < p> Vous pouvez essayer d'écrire une méthode avec le repo de la classe en tant que paramètre formel. p> Je voudrais vous suggérer, forcer le "classid" avec un codé en dur. p> ou p>
S'il vous plaît essayer d'écrire une fonction de référentiel. Juste pour comprendre le problème.
public function getThisDamnClassFromId(int $Id): array { $conn = $this->getEntityManager()->getConnection(); $sql = ' SELECT * FROM classe c WHERE c.id > :val'; $stmt = $conn->prepare($sql); $stmt->execute(['id' => $id]); return $stmt->fetchAll(); }
J'ai déjà essayé avant le SQL et j'ai eu mes données, mais le problème est que j'ai besoin d'obtenir l'objet et non les données.
C'était juste pour être sûr que vous recherchiez des données valides. Avez-vous changé le $ _Post avec demande comme je l'ai écrit? Avez-vous copié le référentiel d'un autre? Essayez d'utiliser faire: référentiel et régénérez-le (vous devez le supprimer avant)
oui j'ai commuté le $ _Post. J'ai supprimé le fichier Classerepository, puis j'ai utilisé PHP Bin \ Console Make: entité --regene. Mais j'ai toujours l'erreur. @ Sniperershady
Pourriez-vous publier votre classe (veuillez ne rien changer), votre classe de référentiel et votre contrôleur? (pas seulement le cas d'utilisation)
La classe: Pastebin.com/r7hrepyd , le référentiel: pastebin.com/mp118dqt , le contrôleur: Pastebin.com/q29Unygd
@mohasalim pouvez-vous inclure l'annotation ORM du champ ID des entités associées (formation, calendrier, personne)
@Jeen Formation: / ** * @orm \ onetomanany (Tarnexity = "app \ entity \ classe", mappéby = "formation") * / Classe privée $;
Calendrier: / ** * @orm \ onetoone (credentity = "app \ entité \ classe", inversedby = "calendrier", cascade = {"persist", "Supprimer"}) * / Classe privée $;
Personne: / ** * @orm \ onetomanany (Tarnexity = "App \ Entity \ Classe", mappéby = "Responsable") * / Classes $ privées;
@mohasalim je voulais dire les champs d'identité de ces entités, mettez également à jour votre question avec le code, ce n'est pas lisible.
La façon dont vous travaillez avec Symfony 4 est fausse. Voici comment votre fonction
Utilisation directe $ _ POST code>,
$ _ serveur code>, etc n'est pas recommandé.
newcalendar code> doit être: p>
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Merci pour l'examen du code, le classeid code> est une valeur valide.
Ensuite maintenant, pouvez-vous quitter (); code> votre fonction, ligne par ligne, jusqu'à ce que vous obteniez l'erreur, il s'agira d'identifier la ligne provoquant l'erreur.
L'erreur vient dans cette ligne: $ classe = $ classerepository-> trouver ($ demande-> demande-> obtenir ('CLA Sseid')); Code> @Peciel
J'ai déjà essayé cette commande, cela me dit [Avertissement] Aucun changement de base de données n'a été détecté. Code>
Alors que votre problème ... Avez-vous défini votre base de données dans .env code> fichier?
Oui, la base de données dans .env est déjà définie. La méthode de recherche () fonctionne avec une autre entité comme le travail, donc je ne pense pas que c'est parce que la base de données n'est pas correctement définie.
Ah, mon mauvais, missionnez le message d'erreur ... avant la ligne qui provoque l'erreur, si vous faites ce Dump ($ classereposer); Quitter (); code>. As-tu quelque chose? Ou le varait est null?
Ensuite, bon ... ce qui signifie que le problème est vraiment autour de cette demande ... pourrait-il être que cela ne peut pas récupérer calendrier code> qui est une oneoone? Y a-t-il une valeur dans le calendrier?
Oui Calendrier contient de la valeur mais je ne pense pas que c'est à cause du calendrier.
Je ne pense pas que ce soit le cas mais, par chacette, la requête apparaît dans l'onglet Doctrine du profileur?
Ouais, cette requête est fausse ... t10 code> n'a pas été aliasé. Donc, ça correspond à rien. Il shoult soit
t0.id code>. La question est ... Comment pouvons-nous nous retrouver avec cette requête ... Je soupçonne qu'une relation est fausse, mais ne peut pas comprendre de quelle manière c'est ...: /
L'erreur provient de mauvaises associations avec l'entité. J'ai donc supprimé l'entité et toutes les associations et regroupez la classe et maintenant son travail. P>
Votre base de données est-elle à jour / est la table créée?
@Jeen oui bien sûr
Pouvez-vous exécuter PHP Bin / Console Doctrine: Schéma: Valider? Comme l'erreur affiche dans la clause ON, il pourrait y avoir quelque chose de mal avec les relations.
N'est pas
getManager () code> manquant après
getdoctrine () code>? Dans Symfony 4, vous ne le faites plus si ...
Ok j'ai reçu un message d'erreur lorsque j'exécute PHP Bin / Console Doctrine: Schéma: Valider. Maintenant, c'est ok la commande me dit: [OK] Le schéma de base de données est synchronisé avec les fichiers de mappage. Mais j'ai toujours la même erreur lorsque j'utilise la méthode Trouver () pour chercher des objets.
@Preciel dans la documentation: symfony.com/doc/ actuel / ... . Ils n'utilisent pas GetManager (). Et la même méthode fonctionne avec mon autre entité.
Étant donné que le message d'erreur indique qu'il ne sait pas
t10.id code> il suggère que l'erreur se produit sur certains profond i> jointes. (QueryBuilder incrémente généralement les numéros d'alias qu'il donne les tables de la requête, à partir de T0, ...). Il est très probable que T10 n'est pas la table / entité de la Classe.
Alors pouvez-vous fournir un peu plus de votre contrôleur s'il vous plaît? Je ne pense pas que votre erreur est l'endroit où vous pensez que c'est. C'est très probablement sur un
rejoindre code>.
$ calendar = nouveau calendrier (); $ calendrier-> SetStartDate ($ _ POST ['START']); $ calendrier-> setenddate ($ _ post ['fin']); $ calendrier-> Seventent ($ _ post ["Evénement"]); $ classeid = $ _post ['Classeid']; $ repo = ceci-> getdoctrine () -> getRepository (Classe :: Classe); $ classe = $ repo-> trouver ($ classeid); $ calendrier-> SetClasse ($ Classe); Code> @preciel
Modifiez votre question au lieu d'utiliser Commentaire pour compléter votre code @mohasalim
@Preciel c'est fait
Pouvez-vous également ajouter une capture d'écran de l'erreur lancée PLZ? (essayer d'isoler la ligne où l'erreur se produit)
@Preciel imgur.com/a/i248hje
Je voulais dire l'erreur lancée par symfony (cette page pleine de rouge)
@Preciel imgur.com/a/g09LVWL
Une longue capture d'écran pour voir ce qui est sous l'exception Log Plz (écrire un guichet automatique de Replay, beaucoup de choses ne sont pas juste dans votre code)
@Preciel imgur.com/A/G09LVWL J'ai mis à jour avec tous les écrans.