Почему моя вставка не работает с Doctrine 2? - PullRequest
0 голосов
/ 03 сентября 2011

SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец «имя пользователя» не может быть пустым

Я проверил и подтвердил, что все 3 входных параметра не пусты!

function insert_user($username,$email,$password) 
        {
$user = new User();
$user->setUsername = $username;
$user->setEmail = $email;
$user->setPassword = $password;

    try {
            //save to database
            $this->em->persist($user);
            $this->em->flush();
        }
        catch(Exception $err){

            die($err->getMessage());
        }
        return true;
        }

Схема базы данных

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

класс сущностей

<?php



use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @Table(name="user")
 * @Entity
 */
class User
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $username
     *
     * @Column(name="username", type="string", length=300, nullable=false)
     */
    private $username;

    /**
     * @var string $email
     *
     * @Column(name="email", type="string", length=300, nullable=false)
     */
    private $email;

    /**
     * @var string $password
     *
     * @Column(name="password", type="string", length=300, nullable=false)
     */
    private $password;


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

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

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

    /**
     * Set email
     *
     * @param string $email
     */
    public function setEmail($email)
    {
        $this->email = $email;
    }

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

    /**
     * Set password
     *
     * @param string $password
     */
    public function setPassword($password)
    {
        $this->password = $password;
    }

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

1 Ответ

1 голос
/ 03 сентября 2011

У вас действительно есть свойства (public) с такими именами, как setUsername? Или вы хотите вызвать метод setUsername($username)?

$user->setUsername($username);
$user->setEmail($email);
$user->setPassword($password);

Помните, что лучший способ получить помощь по Doctrine 2 - это также опубликовать определение класса сущности

...