Блокировка строки в CodeIgniter - PullRequest
       1

Блокировка строки в CodeIgniter

1 голос
/ 03 февраля 2020

Я модифицирую приложение для реализации блокировки строк в codeigniter. Я использовал MySQL для блокировки сериализуемой транзакции, которая работала как надо, когда я пытался в MySQL верстаке.

Но при попытке Codeigniter кажется, что ничего не происходит, другие пользователи все еще могут изменять данные в ряд. Я пытался изменить порядок транзакций и запросов вокруг, но, похоже, ничего не работает. База данных работает на Innodb.

Я пробовал несколько методов, включая приведенный ниже, который, очевидно, работает. Но нет блокировки строк, и я могу одновременно обновлять несколько windows.

    /*
     * Get id specified sales_order.
     *
     * @param int $sales_order_id - Sales_order ID.
     * @return array - Return array of sales_order.
     *
     */

public function get_sales_order($sales_order_id)
{
    // Select DB.
    $this->db->db_select($this->selected_db);

    // Prepare query.
    $sql = $this->db->select('sales_orders.id,
                      sales_orders.job_id,
                      sales_orders.invoice_id,
                      sales_orders.quote_id,
                      sales_orders.consignee_id,
                      sales_orders.carrier_id,
                      sales_orders.carrier_account_number,
                      sales_orders.delivery_instructions,
                      sales_orders.outwards_type,
                      sales_orders.reference_number,
                      sales_orders.pick_reference,
                      sales_orders.order_number,
                      sales_orders.client_reference,
                      sales_orders.date_posted,
                      sales_orders.date_required,
                      sales_orders.status,
                      sales_orders.shipping_method,
                      sales_orders.notes,
                      sales_orders.total_weight_ordered,
                      sales_orders.total_cubic_ordered,
                      sales_orders.total_units_ordered,
                      sales_orders.total_weight_picked,
                      sales_orders.total_cubic_picked,
                      sales_orders.total_units_picked,
                      sales_orders.total_cartons,
                      sales_orders.total_outers,
                      sales_orders.total_pallets,
                      sales_orders.uniform_pallets_picked,
                      sales_orders.pick_time_taken,
                      sales_orders.hoist_unloads,
                      sales_orders.total_labels,
                      sales_orders.plastic_sleeves,
                      sales_orders.shrink_wrap,
                      sales_orders.total_straps,
                      sales_orders.pallet_repacking,
                      sales_orders.carton_repacking,
                      sales_orders.is_urgent,
                      sales_orders.is_backorder,
                      sales_orders.is_picked,
                      sales_orders.is_packed,
                      sales_orders.is_shipped,
                      sales_orders.is_invoiced,
                      sales_orders.is_finalised,
                      sales_orders.is_cancelled,
                      sales_orders.amount_subtotal,
                      sales_orders.amount_discount,
                      sales_orders.amount_gst,
                      sales_orders.amount_total,
                      sales_orders.picked_by,
                      sales_orders.cancelled_by,
                      sales_orders.datetime_expected_pickup,
                      sales_orders.datetime_pick_started,
                      sales_orders.datetime_pick_completed,
                      sales_orders.datetime_finalised,
                      jobs.reference_number AS job_number,
                      quotes.reference_number AS quote_number')
                    ->from($this->selected_db . '.' . $this->table_name)
                    ->join($this->selected_db . '.quotes AS quotes', 'quotes.id = sales_orders.quote_id', 'left')
                    ->join($this->default_db . '.jobs AS jobs', 'jobs.id = sales_orders.job_id')
                    ->where('sales_orders.id', $sales_order_id)
                    ->get_compiled_select();

    $this->db->reset_query();

    //$this->db->set('autocommit = 0');
    $this->db->query('SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;');
    $this->db->trans_start();

    // Process query and return row.
    $data = $this->db->query("{$sql} FOR UPDATE");



    return $data->row();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...