无法识别的字段:user_name,同时使用ZF2查询Via Doctrine

时间:2013-02-05 13:48:06

标签: php doctrine zend-framework2

这是我尝试查询时的代码片段

   if ($request->isPost()) {
        $form->setData($request->getPost());
        if ($form->isValid()) {

            //check authentication...
            $this->getAuthService()->getAdapter()
                    ->setIdentity($request->getPost('username'))
                    ->setCredential($request->getPost('password'));

            $username = $request->getPost('username');
            $password = $request->getPost('password');
            $result = $this->getAuthService()->authenticate();

            $criteria = array("user_name" => $username,);
           $results= $this->getEntityManager()->getRepository('Subject\Entity\User')->findBy($criteria);
           print_r($results);
           exit;

我收到以下错误

  

无法识别的字段:user_name

这些是我的包含

  

使用Doctrine \ ORM \ EntityManager,       专辑\实体\专辑;

编辑:这是我的Subject \ Entity \ User文件

 <?php

namespace Subject\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;

/**
 * @ORM\Entity

* @ORM\Table(name="users")

* @property string $username

* @property string $password

* @property int $id

 */
class User implements InputFilterAwareInterface {

protected $_username;
protected $_password;

 /**
 * @ORM\OneToMany(targetEntity="Subject\Entity\Subject", mappedBy="user")
 * @var Collection
 */
private $subjects;

/** @ORM\Id() @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") @var int */
protected $_id;

public function __get($property) {

    return $this->$property;
}

public function __set($property, $value) {

    $this->$property = $value;
}

//Getters and setters

/** @return Collection */
public function getSubjects() {
    return $this->subjects;
}

/** @param Comment $comment */
public function addSubject(Subject $subjects) {
    $this->subjects->add($subjects);
    $subjects->setUser($this);
}


 public function __construct($subjects) {
    //Initializing collection. Doctrine recognizes Collections, not arrays!
    $this->subjects = new ArrayCollection();

}
public function getArrayCopy() {

    return get_object_vars($this);
}

public function populate($data = array()) {

    $this->_id = $data['id'];

    $this->_username = $data['username'];

    $this->_password = $data['password'];
}

public function setInputFilter(InputFilterInterface $inputFilter) {

    throw new \Exception("Not used");
}

public function getInputFilter() {

    if (!$this->inputFilter) {
        $inputFilter = new InputFilter();
        $factory = new InputFactory();
        $inputFilter->add($factory->createInput(array(
                    'name' => 'id',
                    'required' => true,
                    'filters' => array(
                        array('name' => 'Int'),
                    ),
                )));
        $inputFilter->add($factory->createInput(array(
                    'name' => 'username',
                    'required' => true,
                    'filters' => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                    ),
                    'validators' => array(
                        array(
                            'name' => 'StringLength',
                            'options' => array(
                                'encoding' => 'UTF-8',
                                'min' => 1,
                                'max' => 100,
                            ),
                        ),
                    ),
                )));



        $inputFilter->add($factory->createInput(array(
                    'name' => 'password',
                    'required' => true,
                    'filters' => array(
                        array('name' => 'StripTags'),
                        array('name' => 'StringTrim'),
                    ),
                    'validators' => array(
                        array(
                            'name' => 'StringLength',
                            'options' => array(
                                'encoding' => 'UTF-8',
                                'min' => 1,
                                'max' => 100,
                            ),
                        ),
                    ),
                )));



        $this->inputFilter = $inputFilter;
    }



    return $this->inputFilter;
}

//put your code here
}

?>

1 个答案:

答案 0 :(得分:5)

您正在查询错误的字段。该字段在您的实体类中名为_username。另外,检查注释,_username_password似乎没有任何注释,因此不会将它们创建为数据库字段。

如果您正确设置了实体并且所有字段都在数据库中,则只需查询_username属性:

 if ($request->isPost()) {
     $form->setData($request->getPost());
     $repo = $this->getEntityManager()->getRepository('Subject\Entity\User');
     if ($form->isValid()) {
         // snip ...
         $criteria = array("_username" => $username,);
         $results= $repo->findBy($criteria);
         print_r($results);
         exit;
    }
}

您的用户实体应如下所示:

class User implements InputFilterAwareInterface {
    /**
     * @ORM\Column(name="username", type="string", length=64, unique=true)
     */
    protected $_username;
    /**
     * @ORM\Column(name="password", type="string", length=64)
     */
    protected $_password;

    // snip ...
}

您可以查看PSR-2标准。目前不鼓励方法和变量名称中的下划线。