CodeIgniter MSSQL получить last_id () составного первичного ключа - PullRequest
0 голосов
/ 08 июня 2018

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

В соответствии с требованиями составной состоит из 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

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

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

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

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

Вы должны использовать $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

...