我对CodeIgniter很陌生,正在努力完成我的第一个项目。我有两个ajax数据库更新函数,它们(本身)工作得非常好。
(因为查询是这样工作的,所以为了这个例子,我简化了:)
public function updateA($data) {
$this->pos1 = $data['pos1'];
$this->pos2 = $data['pos2'];
$this->db->where('id', 1);
$result = $this->db->update('tablePos', $this);
}
和
public function updateB($data) {
foreach ($data as $value) {
$this->name = $value['name'];
$this->type = $value['type'];
$this->db->where('id', $value['ID']);
$result = $this->db->update('tableNames', $this);
}
}
如前所述,如果我在我的控制器中称他们为"单独",他们两个的工作方式都很有魅力。就像
$this->MainModel->updateA($data);
或
$this->MainModel->updateB($data);
但不是
$this->MainModel->updateA($data);
$this->MainModel->updateB($data);
然后执行第一个查询,但不执行第二个查询。我先打哪个电话没有区别。如果我连续调用这两个函数,则只执行第一个,并且我的ajax函数返回
加载资源失败:服务器响应状态为500(内部服务器错误)
我整晚都在寻找——毫无线索…:(
编辑:
我现在将所有内容隔离到一个测试用例中:
控制器:
public function parse()
{
$this->load->model('MainModel');
$position = '{"ID":1,"pos1":5,"pos2":6}';
$position = json_decode($position, true);
$names = '[{"ID":1,"name":"AAAA","type":9},{"ID":2,"name":"BBBBB","type":2},{"ID":3,"name":"CC","type":4}]';
$names = json_decode($names, true);
$this->MainModel->updateA($position);
$this->MainModel->updateB($names);
}
型号:
public function updateA($data_a) {
error_log("----------- start A -----------");
$this->pos1 = $data_a['pos1'];
$this->pos2 = $data_a['pos2'];
$this->db->where('id', 1);
$result = $this->db->update('tablePos', $this);
error_log($this->db->last_query());
error_log("----------- stop A -----------");
}
public function updateB($data_b) {
error_log("----------- start B -----------");
foreach ($data_b as $value) {
$this->name = $value['name'];
$this->type = $value['type'];
$this->db->where('id', $value['ID']);
$result = $this->db->update('tableNames', $this);
error_log($this->db->last_query());
}
error_log("----------- stop B -----------");
}
两个更新调用的错误日志结果:
【2015年12月3日14:13:15欧洲/柏林】---------------启动A---------------
【2015年12月3日14:13:15欧洲/柏林】更新
tablePos
设置pos1
=5,pos2
=6其中id
=1【2015年12月3日14:13:15欧洲/柏林】---------------停止A---------------
【2015年12月3日14:13:15欧洲/柏林】---------------启动B----------------
结果
$this->MainModel->updateA($position);
// $this->MainModel->updateB($names);
【2015年12月3日14:23:23欧洲/柏林】---------------启动A---------------
【2015年12月3日14:23:23欧洲/柏林】更新
tablePos
设置pos1
=5,pos2
=6其中id
=1【2015年12月3日14:23:23欧洲/柏林】---------------停止A---------------
结果
// $this->MainModel->updateA($position);
$this->MainModel->updateB($names);
【2015年12月3日14:25:14欧洲/柏林】---------------启动B----------------
【2015年12月3日14:25:14欧洲/柏林】更新
tableNames
设置name
=‘AAAA’,type
=9其中id
=1更新
tableNames
设置name
="BBBBB",type
=2其中id
=2【2015年12月3日14:25:14欧洲/柏林】更新
tableNames
设置name
='CC',type
=4其中id
=3【2015年12月3日14:25:14欧洲/柏林】---------------停止B----------------
它只是停了下来。没有错误。当我触发它们时,错误日志确实显示了其他php错误。所以这对我来说绝对是神秘的。。。
尝试更改方法以使用局部变量,而不是类属性$this
,如下所示:
public function updateA($data_a) {
error_log("----------- start A -----------");
$this->db->where('id', 1);
$updateData = array(
'pos1' => $data_a['pos1'],
'pos2' => $data_a['pos2'],
);
$result = $this->db->update('tablePos', $updateData);
error_log($this->db->last_query());
error_log("----------- stop A -----------");
}
和
public function updateB($data_b) {
error_log("----------- start B -----------");
foreach ($data_b as $value) {
$updateData = array(
'name' => $value['name'],
'type' => $value['type'],
);
$this->db->where('id', $value['ID']);
$result = $this->db->update('tableNames',$updateData);
error_log($this->db->last_query());
}
error_log("----------- stop B -----------");
}
一个可能的原因可能是加载模型时初始化了类属性。
对于使用$this
更新时的第二个调用,该类仍然保留在第一次更新期间使用的属性,由于此处不需要这些属性,因此它们会导致错误。
然而,我不确定这些值如何没有反映在您记录的查询中。
对不起,我无法添加评论,所以我将在此处添加我的评论。
Codeigniter文档中说
https://ellislab.com/codeigniter/user-guide/general/models.html#anatomy
其中Model_name是类的名称。类名的第一个字母必须大写,其余字母小写
并且您的模型的名称不符合此规则。