Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony3] Erreur "Unrecognized field" findBy

Sujet résolu
16 juillet 2016 à 5:31:22

Bonjour,

Voilà, j'essaye de faire un findBy sur une colonne sans succès ^^

Voilà mon entité user :

<?php

namespace Panel\AdminBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * User
 *
 * @ORM\Table(name="panel_user")
 * @ORM\Entity(repositoryClass="Panel\AdminBundle\Repository\UserRepository")
 */
class User
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=255, unique=true)
     * @Assert\NotBlank()
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="minecraft_username", type="string", length=255, nullable=true)
     */
    private $minecraftUsername;

    /**
     * @var string
     *
     * @ORM\Column(name="address_mail", type="text")
     * @Assert\Email()
     * @Assert\NotBlank()
     */
    private $addressMail;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date_register", type="datetimetz", nullable=true)
     */
    private $dateRegister;

    /**
     * @var string
     *
     * @ORM\Column(name="salt", type="text")
     */
    private $salt;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="text")
     */
    private $password;


    public function __construct()
    {
        $this->dateRegister = new \DateTime();
        $this->salt = uniqid(mt_rand(), true);
    }

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set username
     *
     * @param string $username
     *
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set minecraftUsername
     *
     * @param string $minecraftUsername
     *
     * @return User
     */
    public function setMinecraftUsername($minecraftUsername)
    {
        $this->minecraftUsername = $minecraftUsername;

        return $this;
    }

    /**
     * Get minecraftUsername
     *
     * @return string
     */
    public function getMinecraftUsername()
    {
        return $this->minecraftUsername;
    }

    /**
     * Set addressMail
     *
     * @param string $addressMail
     *
     * @return User
     */
    public function setAddressMail($addressMail)
    {
        $this->addressMail = $addressMail;

        return $this;
    }

    /**
     * Get addressMail
     *
     * @return string
     */
    public function getAddressMail()
    {
        return $this->addressMail;
    }

    /**
     * Set dateRegister
     *
     * @param \DateTime $dateRegister
     *
     * @return User
     */
    public function setDateRegister($dateRegister)
    {
        $this->dateRegister = $dateRegister;

        return $this;
    }

    /**
     * Get dateRegister
     *
     * @return \DateTime
     */
    public function getDateRegister()
    {
        return $this->dateRegister;
    }

    /**
     * Set salt
     *
     * @param string $salt
     *
     * @return User
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

    /**
     * Get salt
     *
     * @return string
     */
    public function getSalt()
    {
        return $this->salt;
    }

    /**
     * Set password
     *
     * @param string $password
     *
     * @return User
     */
    public function setPassword($password)
    {

        $this->password = $password;

        return $this;
    }

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }
}


Concernant l'enregistrement, j'utilise une méthode dans le controller :

protected function registerUser(User $currentUser,ObjectManager $em){
        $repository = $em->getRepository('PanelAdminBundle:User');
        $checkUsername = $repository->findBy(array('username', 'test'));
        //$currentUser->getUsername()
        //$checkAddressMail = $repository->findOneBy(array('address_mail', $currentUser->getAddressMail()));

        //var_dump($checkAddressMail);
        //var_dump($checkUsername);

        $salt = "12345";
        $hash = hash("sha512", $currentUser->getPassword() . $currentUser->getSalt());

        return $currentUser;
    }

Concernant le $em, ce n'est que :

$em = $this->getDoctrine()->getManager();

Comme, vous pouvez le voir, j'appelle la colonne username, et malheureusement, j’obtiens cette erreur :

" Unrecognized field: 0"

Merci pour votre aide.

Cordialement;

  • Partager sur Facebook
  • Partager sur Twitter
16 juillet 2016 à 5:55:43

Bonjour,

Le findBy ne s'écrit pas comme cela à mon sens :

$checkUsername = $repository->findBy(array(
'username' => 'test'));

A+

  • Partager sur Facebook
  • Partager sur Twitter
16 juillet 2016 à 17:29:28

Bonjour,

Merci pour ton aide, et oui je te confirme, on écrit bien de ta façon, c'est juste moi qui est c** ^^

  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2021 à 10:55:37

Je sais que ce post est très vieux, mais merci car j'avais la même erreur sans comprendre et ta solution a réglé mon problème. Donc merci beaucoup ! Je suis en Symfony 4.4 et pourtant la doc dis bien d'utiliser :

$product = $repository->findOneBy([
    'name' => 'Keyboard',
    'price' => 1999,
]);
  • Partager sur Facebook
  • Partager sur Twitter
5 mai 2021 à 18:14:44

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL