CodeIgniter MSSQL получить last_id () составного первичного ключа

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

Согласно требованиям, составная часть состоит из RegionID и AuthorizationID, но AuthroizationID не должен быть уникальным для себя. Другими словами, они хотят это сделать:

RegionID    AuthorizationID
300         1
300         2
100         1

Поэтому я не могу создать простую идентификацию при авторизации, а просто вставить RegionID на передней панели. (Поверьте мне, я старался изо всех сил, чтобы не сделать это таким образом)

Во всяком случае, я создал триггер INSERT в MSSQL 2008, чтобы он выводил недавно вставленные RegionID и AuthorizationID, и инкапсулировал его в dbo.vwCreateRA. Отлично работает в MSSQL Studio.

Однако, чтобы сделать его вообще пригодным для использования, я хочу иметь возможность вернуть Composite PK из вставки внутри codeigniter, чтобы перенаправить пользователя на вновь созданную запись.

$sql = "INSERT INTO ReturnAuthorizations.dbo.vwCreateRA (
[Region],
[CustomerNumber],
/* a bunch of other fields... */
[UserID]
)
VALUES
?,
?,
/* a bunch of other values */
?)";

$query = $this->db->query($sql, [
$customer['SalespersonNumber'],
$customer['CustomerName'],
/* A bunch of other variables... */
$username
]);

die(var_dump($query->last_id());

Дает мне:
Fatal error: Call to a member function last_id() on a non-object

Как я могу получить выход из вставки представления через CodeIgniter, или мне придется полагаться на что-то вроде:

(Прошу прощения за код, возможно, не лучшие практики, предназначенные только для того, чтобы понять смысл запроса)

$sql = "SELECT TOP 1
RegionID,
Authorization
FROM
AuthorizationTable
WHERE
RegionID = " . $customer['Region'] . "AND UserID = " . $username . "ORDER BY
CreateDate DESC";

Спасибо!

0

Решение

Вы должны использовать $this->db->insert_id();

замещать

$query->last_id();

с

$this->db->insert_id();

ОБНОВИТЬ :

Ваш запрос выбора должен быть таким:

$sql = "SELECT TOP 1 RegionID, Authorization
FROM AuthorizationTable
WHERE RegionID = '" . $customer['Region'] . "' AND UserID = '" . $username . "'
ORDER BY  CreateDate DESC";

Посмотреть здесь : https://www.codeigniter.com/user_guide/database/helpers.html#information-from-executing-a-query

1

Другие решения

Других решений пока нет …