php - Zend-1048 列 'member_login' 不能为空

标签 php mysql zend-framework

我尝试设置注册逻辑,但遇到问题

消息:SQLSTATE[23000]:违反完整性约束:1048 列“member_login”不能为空,查询为:INSERT INTO members (member_login) VALUES (?) enter image description here

经过几个小时的努力,仍然没有任何想法出错。这是我的源代码。 有人可以给我一些想法吗?

我的模型.php

<?php

class Application_Model_Member
{
    protected $_id;
    protected $_member_login;


    public function __construct(array $options = null)
    {
        if (is_array($options)) {
            $this->setOptions($options);
        }
    }

    public function __set($name, $value)
    {
        $method = 'set' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid member property');
        }
        $this->$method($value);
    }

    public function __get($name)
    {
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid member property');
        }
        return $this->$method();
    }

    public function setOptions(array $options)
    {
        $methods = get_class_methods($this);
        foreach ($options as $key => $value) {
            $method = 'set' . ucfirst($key);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }

    public function setId($id)
    {
        $this->_id = (int) $id;
        return $this;
    }

    public function getId()
    {
        return $this->_id;
    }

    public function setMemberLogin($text)
    {
        $this->_member_login = (string) $text;
        return $this;
    }

    public function getMemberLogin()
    {
        return $this->_member_login;
    }


}

我的MemberMapper.php

<?php

class Application_Model_MemberMapper
{
    protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Members');
        }
        return $this->_dbTable;
    }

    public function save(Application_Model_Member $member)
    {
     $data = array(
     'member_login' => $member->getMemberLogin(),

        );

        if (null === ($id = $member->getId())) {
            unset($data['member_id']);
            $this->getDbTable()->insert($data);
        } else {
            $this->getDbTable()->update($data, array('member_id = ?' => $id));
        }
    }

    public function find($id, Application_Model_Member $member)
    {
        $result = $this->getDbTable()->find($id);

        if (0 == count($result)) {
            return;
        }
        $row = $result->current();

        $member->setId($row->member_id)
              ->setMemberLogin($row->member_login);


    }

    public function fetchAll()
    {
        $resultSet = $this->getDbTable()->fetchAll();
        $entries   = array();
        foreach ($resultSet as $row) {
            $entry = new Application_Model_Member();
            $entry->setId($row->member_id)
                  ->setMemberLogin($row->member_login);

            $entries[] = $entry;
        }
        return $entries;
    }
}

DbTable:
class Application_Model_DbTable_Members extends Zend_Db_Table_Abstract
{   
    protected $_name = 'members';    
}

表单:Registration.php

<?php
class Application_Form_Auth_Registration extends Zend_Form
{
    public function init()
    {
        $this->setMethod('post');

        $this->addElement(
            'text', 'member_login', array(
                'label' => 'Username:',
                'required' => true,
                'filters'    => array('StringTrim')
            ));


        $this->addElement('submit', 'register', array(
            'ignore'   => true,
            'label'    => 'Sign up'
            ));
    }
}

注册 Controller :

public function signupAction()
{
    $request = $this->getRequest();
    $regform = new Application_Form_Auth_Registration();

    if ($this->getRequest()->isPost()) {
        if ($regform->isValid($request->getPost())) {
            $member = new Application_Model_Member($regform->getValues());
            $mapper = new Application_Model_MemberMapper();
            $mapper->save($member);
            return $this->_helper->redirector('/books/view');
        }
    }

    $this->view->regform = $regform;

} 

最佳答案

终于修复了这个bug。 Element 的命名出了问题。例如,在您的数据库中有“member_login”,那么元素名称应该类似于memberLogin。

关于php - Zend-1048 列 'member_login' 不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778662/

相关文章:

php - 我想建立一个博客系统,个人用户可以编辑和删除他的帖子,但这并不是每个用户都可以编辑删除任何用户帖子。

php - "Pay now"按钮集成的 Paypal 选项 (PHP)

php - Codeigniter 和黑客语言

mysql - 如果包含特定字符,如何重命名WordPress帖子标题

php - 在 Zend_Form 类中的 addElement() 上使用 Between 验证器

zend-framework - Zend Framework 应用程序的默认模块化目录结构

php - Zend Studio 中的错误 "Detecting Library Folders"

php - 编写 <?php echo ... ?> 的最快方法

java - 如何对数据库中的表进行排序

mysql - 使用 Alter 命令删除主键和外键