【问题标题】:Still stuck in update row cakephp仍然停留在更新行 cakephp
【发布时间】:2013-03-25 02:08:19
【问题描述】:

我已经发布了一个问题并得到了帮助,但我仍然没有成功。 我试图更新 cakePHP 2.3.1 中的一行。我有类 Test 扩展 AppModel 与 $validates 数组,以及控制器(简化):

public function editstudent()   {
if($this->request->data)    {
    $this->Test->stuId= $this->data['Test']['stuId'];
    if ($this->Test->save($this->request->data))    {
        $this->set('state',1);
    }
}

根据用户的建议编辑后我的观点:D:

class Test extends AppModel {
var $name= 'Test';
var $primaryKey= 'stuId';
public $validate= array(.......);
}

我在 View 中设置了 $primaryKey,在控制器中设置了 $this->Test->$primaryKey 但仍然出现错误:

数据库错误错误: SQLSTATE[23000]: 完整性约束违规: 1062 Duplicate entry '' for key 'PRIMARY' SQL Query: INSERT INTO cakePhp.tests (stuName, stuDoB, stuAdd) VALUES ('Đào Đức Anh', ' 2013-03-25', '金莲')

谁能帮帮我,我真的需要帮助,我被困在这个问题上 2 天,无法弄清楚:(

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    我认为您必须更改以下行

    $this->Test->stuId = $this->data['Test']['stuId'];
    

    $this->Test->id = $this->data['Test']['stuId'];
    

    因为包含主键值的是id 属性。

    【讨论】:

      【解决方案2】:

      快速尝试:

      尝试在控制器代码中将 $this->data 更改为 $this->request->data

      更多内容:

      归根结底,您的主键未设置。

      1. 尝试使用(根据 CakePHP 书籍)以下语法:

        public $primaryKey = 'stuId'; //notice "public" instead of "var"

      2. 检查以找出为什么“studId”不在保存的数据中。

        debug($this->request->data);

      3. 我的假设是,它不在请求数据中 - 如果是的话,你会没事的。

      将 studId 添加到正在提交的表单中或 以您认为合适的任何其他方式将 ID 放入请求数据中

      旁注:

      你一直在说“视图”,但你真正的意思是“模型”。

      【讨论】:

        【解决方案3】:

        在 AppModel.php 中添加您的主键 公共 $primaryKey='用户名';

        【讨论】:

        • 虽然此代码 sn-p 可能会解决问题,但including an explanation 将帮助人们了解您的代码建议的原因。
        猜你喜欢
        • 2018-06-15
        • 2016-11-04
        • 1970-01-01
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 2018-11-11
        相关资源
        最近更新 更多