Транзакция Codeigniter - Laravel API - 2 схемы БД - PullRequest
0 голосов
/ 16 ноября 2018

Перед вопросом позвольте мне установить сцену.

База данных 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.

Если потребуется дополнительная информация / код или я что-то забыл, я с радостью отредактирую вопрос вместе с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...