Если $receipt === 4
, вы выполняете это:
$newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);
и затем вы сохраняете значение в БД с помощью $this->ion_auth->update_receipt($invid,$receipt,$newreceipt);
.
Итак, теперь база данных содержит «UT- что-то ».
Теперь, если вы выполните этот простой код на PHP, вы, вероятно, поймете:
$test = "UT-10";
++$test;
echo "$test\n";
Будет выведено UT-11
.
Вы можете взглянуть на официальную документацию , чтобы понять, почему это так работает .
Итак, в следующий раз, когда $receipt === 4
, вы выполните тот же код:
$newreceipt = $UTextension.(++$last_receipt->row()->inv_cno);
, что эквивалентно "UT-" . "UT-*something*"
.
И вот нежелательный результат.
Теперь решение соответствует вашим потребностям:
Если inv_cno
должно быть целым числом, вы просто сохраняете целое число и вычисляете обратно "prefix-" . inv_cno
в коде.
В противном случае вам следует просто проверить, есть ли в $last_receipt->row()->inv_cno
уже префикс , чтобы понять, нужно ли вам добавлять / изменять его или нет.
РЕДАКТИРОВАТЬ --- после комментариев пользователя.
Теперь, когда мы теперь varchar, предполагая, что префикс всегда представляет собой строку из 3 символов («UT-», «GT-» и т. Д.), Вы можете создать что-то вроде этого.
Согласно вашему примеру, я предполагаю, что inv_cno уже может иметь или не иметь префикс.
И я предполагаю, что допустимыми префиксами являются «UT-» и «GT -».
Я напишу вам пример здесь, чтобы вы поняли мою точку зрения, тогда вам придется интегрировать ее в свой код:)
<?php
function get_new_receipt($inv_cno, $extension) {
$prefix_len = 3;
$admissible_prefixes = array("UT-", "GT-");
$inv_cno++;
if (strlen($inv_cno) <= $prefix_len) {
return $extension . $inv_cno;
}
$current_prefix = substr($inv_cno, 0, $prefix_len);
if ($current_prefix === $extension) {
return $inv_cno;
}
return $extension . substr($inv_cno, $prefix_len);
}
$test = "UT-10";
$test = get_new_receipt($test, "UT-");
echo "$test\n";
$test = get_new_receipt($test, "UT-");
echo "$test\n";
$test = get_new_receipt($test, "GT-");
echo "$test\n";
P.S .: В любом случае, как примечание, не так безопасно выполнять этот вид математики над строками. Но это другая история.