Laravel 类型提示,模型保存时 id 返回 null

Posted

技术标签:

【中文标题】Laravel 类型提示,模型保存时 id 返回 null【英文标题】:Laravel type hinting, id return null on model save 【发布时间】:2021-01-25 21:47:13 【问题描述】:

我正在尝试使用类型提示来存储值。

public function store(Model $model, ModelRequest $request) 
    $model->create($request->validated())->save();
    dd($model->id);

但是,Id 返回 null。

【问题讨论】:

create() 后无需调用 save() 【参考方案1】:

正如@aimme 在评论中所说,您不需要 save() 方法。 save() 方法返回 truefalse

如果您真的需要查看附加内容:

$new_created= $model->create($request->validated());
dd($new_created->id);

如果它不起作用,那么你必须检查 $request->validated() 的返回:

dd($request->validated());

【讨论】:

【参考方案2】:

您实际上不能将 implicit route model binding 用于 store 方法,因为您无法通过 ID 访问尚不存在的模型(因此没有 ID)。来自官方文档:

Laravel 会自动注入 ID 与请求 URI 中相应值匹配的模型实例。

所以你必须手动创建模型,例如这样

 public function store(StoreUserRequest $request) 
    $user = User::create($request->all());
 

【讨论】:

以上是关于Laravel 类型提示,模型保存时 id 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

保存模型时的Laravel模型尾随数据[重复]

创建时使用 laravel 返回模型

Laravel 集合/模型的类型提示闭包

Laravel:每当我返回一个模型时,总是返回一个与它的关系

Laravel 5 Model Inheritance - 获取子模式时返回父数据

Laravel 更新模型而不是保存新的