提问者:小点点

创建一个没有属性的空Laravel模型实例,但仍然获得id


基本上,我正在创建一个文章实例:

$article = new Article();
//Returns null
$id = $article->id();

但是,这将返回一个空对象。 我想做的是创建一篇文章,并在做之前获得它的id:

$article->save();

尝试创建一个项目是行不通的,因为它需要提供值或具有默认值:

$article = Article::create();

我正在考虑的方法是:

$latest_id = Article::latest()->first()->id;

但我不确定这是不是正确的方法,或者有没有更好的方法。


共3个答案

匿名用户

您无法获取尚未保存的对象/模型的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;