在提出问题之前,让我布置场景。
一个具有2个不同方案的MySQL数据库。
Codeigniter(CI)网站。
Laravel API。
方案B表列具有一个带有方案A表ID的FK。
我启动CI交易,在方案A中添加一行,然后向Laravel API发送请求(插入的行ID是该请求的一部分)。
CI控制器:
$this->db->trans_begin();
if(isset($data['schemeAId'])){
//Insert the new row in Scheme A.
$this->modelSchemeA->insert_row($data['schemeAId'],$data['schemeAValue']);
} else {
//The row already exists, no need to insert anything.
}
稍后在同一控制器中,经过一些计算,我调用了开始卷曲的模型,任务是更新Scheme B行:
$this->curlModel->editSchemeB($data['schemeBId'],$data);
CI模型:
public function editSchemeB($id,$data){
if ( empty($array) or empty($id))return false;
$json=json_encode($array);
$send= array('json' => $json);
$send= json_encode($send);
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $send);
curl_setopt($curl, CURLOPT_URL, API_URL.'/schemeB/'.$id);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: application/json','Content-type: application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result = curl_exec($curl);
$result = json_decode($result);
if ( $result->status == "OK") return result;
return false;
}
经过一些验证后,Laravel API在此行中失败:
Laravel:
$row = SchemeB::where('id', $id)->update($params_array);
在此之前返回某些内容效果很好,请尝试在30秒钟之后返回某些内容。超时以CI显示。这是在插入新的Scheme A行时...如果我使用的是已经存在的Scheme A ID,则可以正常工作。
此外,如果我不进行任何交易就尝试了这两个计划,那么这两个计划都会更新,并且可以再次正常运行。因此,我几乎可以确定这是由于所有CI交易Laravel混乱导致FK限制。
如果需要进一步的信息/代码,或者我忘了一些东西,我很乐意用它来编辑问题。