基本上,我正在创建一个文章实例:
$article = new Article();
//Returns null
$id = $article->id();
但是,这将返回一个空对象。 我想做的是创建一篇文章,并在做之前获得它的id:
$article->save();
尝试创建一个项目是行不通的,因为它需要提供值或具有默认值:
$article = Article::create();
我正在考虑的方法是:
$latest_id = Article::latest()->first()->id;
但我不确定这是不是正确的方法,或者有没有更好的方法。
您无法获取尚未保存的对象/模型的ID。
在这种情况下,ID不存在,您可以找到最新的ID并将该ID增加一个,但是您可以在某些竞争条件下运行,当另一个脚本(也向该表添加新元素)更快时,您将保存错误的ID。
如果需要ID来存储此模型的引用,正确的方法是先保存模型,然后再保存引用。
如果您需要ID来保存包含文件名中的ID的文件,那么您可以先保存模型(以检索ID),然后再次保存缺少信息的模型。
id
是数据库中id
列的值,由于您尚未保存,数据库中没有任何内容(您无法获取它)。
我猜你需要做一些可能会在某一点上失败或被取消的任务,对于这种情况,有一个变通方法,比如:
DB::beginTransaction();
try {
$article = new Article();
$article->fields = 'example';
$article->save();
// Anything needing ID here...
DB::commit();
} catch (\Exception $e) {
DB::rollback();
}
初始化一个空模型以获取它的id不会有帮助,因为id
总是在运行时计算。 请记住,系统中可能会同时出现N
请求。
如果要创建空行以获取保留的ID
,则需要使中的字段为空。
或者,如果您只需要存储在DB表中的最后一个id,则可以通过以下方式实现,但这可能会导致数据中的一些不匹配和不一致:
$LATEST_ID=article::lastate()->first()->id;