Php 如何在Yii创建页面中获取最后一个插入id

Php 如何在Yii创建页面中获取最后一个插入id,php,yii,Php,Yii,我有一个名为Invoice的模型。我为发票模型制作了必要的CRUD。发票模型的属性类似于发票标题、发票编号、发票签发日期、说明。现在我希望用户重定向到发票创建页面时使用,发票号的输入字段应在创建页面中自动填充,最后插入的id为+1,并且应具有类似INV.的前缀。因此,发票号的输入字段应类似于此INV:12。这样,用户无需按递增顺序手动填充发票号。以下是创建页面的图像。第一步all==>根据表的唯一id存储发票号不是一个好主意 因此,您应该用文本插入最后一个发票号的编号部分+1 现在,首先获取最后

我有一个名为
Invoice
的模型。我为发票模型制作了必要的
CRUD
。发票模型的
属性
类似于
发票标题、发票编号、发票签发日期、说明
。现在我希望用户重定向到发票创建页面时使用
,发票号的输入字段应在创建页面中自动填充,最后插入的id为+1,并且应具有类似INV.的前缀。因此,发票号的输入字段应类似于此INV:12。
这样,用户无需按递增顺序手动填充发票号。以下是创建页面的图像。

第一步all==>
根据表的唯一id存储发票号不是一个好主意

因此,您应该用文本插入最后一个发票号的编号部分+1

现在,首先获取最后一个发票型号,然后查找其发票号并填充该字段

在控制器中

$model = new Invoice;

$last_invoice = Invoice::model()->find(array('order'=>'id DESC'));
$last_invoice_number = str_replace("INV:", "", $last_invoice->invoice_mumber);
$new_invoice_number = $last_invoice_number+1;

$model->invoice_number = "INV:".$new_invoice_number;

$this->render('create',array('model'=>$model));
编辑:

无法使用
Yii::app()->db->lastInsertId)
的原因

首先,正如我在第一个位置所说的,从表的唯一id依赖发票id是不好的。第二,如果有人在中间的某个表中插入了sonething怎么办。第三,如果数据库连接在中间关闭并启动怎么办。

只是一个建议:

如果用户不需要填写发票号,那么为什么不直接从显示中跳过它呢。我的意思是不要在创作的时候展示它。提交表单后,您可以沿发票编号显示所有提交的值

提交表单后,只需按$model->id显示发票号;其中id是数据库中的发票号

您可以使用invoice number作为数据库中的主自动增量bigint值。然后在显示时使用INV:前缀


希望有帮助

这是获取Yii中最后一个插入id的简单方法

            Yii::app()->db->getLastInsertId();

$instance\u of_your_model->primaryKey将获得最后一个插入的模型。如何在表单页面中实现这一点?如果应用程序是多用户的,这不是一个好主意。更好的选择是在创建表单时不显示此字段(例如,仅当
!$model->isNewRecord
时,才在form.php show ID field中显示此字段),并在_actionCreate中更改重定向到更新操作(而不是Yii的默认视图操作),假设用户启动表单/发票a,并且(尚未)完成它。然后,一个用户(相同或不同的用户)打开下一个表单/发票B,获得相同的发票号并完成它。接下来,第一个用户决定完成表单A。。。现在您的数据库和/或发票系统已损坏。我想我必须在控制器操作创建方法中使用这些代码,或者必须在控制器操作创建()中定义单独的?是的是的,它正在工作..但是..每次发票号码显示INV:2346时。我想要最后一个插入id+1,这样它将显示不断增加的id。您本身不必进行新的查询。数据库连接有一个getLastInsertId函数(Yii::app()->DB->lastInsertId)。如果它适用于您的情况,可能会更容易使用。感谢Ujjwal提出的好建议。我正在考虑朝着这个方向做所有事情。非常感谢您的建议。