Перед вопросом позвольте мне установить сцену.
База данных MySQL с двумя различными схемами.
Сайт Codeigniter (CI).
API Laravel.
Столбец таблицы схемы B содержит FK с идентификатором таблицы схемы A.
Я запускаю транзакцию CI, добавляю строку в схему A, а затем отправляю запрос в Laravel API (вставленный идентификатор строки является частью этого запроса).
Контроллер 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.
}
Позже в том же контроллере, после некоторых вычислений, я вызываю модель, которая запускает завиток, задача состоит в том, чтобы обновить строку схемы 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. Это когда новая строка схемы A вставляется ... Если я работаю с уже существующим идентификатором схемы A, это работает правильно.
Кроме того, если я попробую это без транзакции, обе Схемы обновятся, и это снова работает нормально. Так что я почти уверен, что это связано с ограничением FK со всем этим беспорядком CI Transaction-Laravel.
Если потребуется дополнительная информация / код или я что-то забыл, я с радостью отредактирую вопрос вместе с ним.