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

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


$article = new Article();

//Returns null

$id = $article->id();

然而,这会返回一个空对象。我想做的是创建一篇文章并在执行之前获取其 id:


$article->save();

尝试创建文章不起作用,因为它需要提供值或具有默认值:


$article = Article::create();

我正在考虑的方法是:


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

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


动漫人物
浏览 141回答 3
3回答

千巷猫影

这是数据库中列的id值,因为你还没有保存,数据库中什么也没有(你无法获取它)。id我想您需要执行一些可能在某些时候失败或被取消的任务,对于这种情况,有一个解决方法,例如:DB::beginTransaction();try {    $article = new Article();    $article->fields = 'example';    $article->save();    // Anything needing ID here...    DB::commit();} catch (\Exception $e) {    DB::rollback();    // Handle or re-throw:    throw $e;}

白衣染霜花

您无法获取尚未保存的对象/模型的 ID。在这种情况下,ID 不存在,您可以找到最新的 ID 并将该 ID 加一,但是您可能会在某些竞争条件下运行,当另一个向该表添加新元素的脚本速度更快时,然后您稍后保存的 ID 错误。如果您需要 ID 来存储该模型的引用,正确的方法是先保存模型,然后保存引用。如果您需要 ID 来保存文件名中包含 ID 的文件,那么您在数据库中保存为文本的内容可以先保存模型(以检索 ID),然后再次保存包含缺失信息的模型。

慕勒3428872

初始化一个空模型来获取它的 id 没有帮助,因为 idid总是在运行时计算。请记住,系统可能n同时收到请求。nullable如果您想创建一个空行来获取保留,则需要创建这些字段id。或者,如果您只需要存储在数据库表中的最后一个 id,则可以通过以下方式执行此操作,但这可能会导致数据中出现一些不匹配和不一致:$latest_id = Article::latest()->first()->id;
打开App,查看更多内容
随时随地看视频慕课网APP