You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel创建模型时如何结合请求验证传入额外字段?

解决方案

你可以通过合并验证后的请求字段与额外字段的方式,把user_id和status_id传入模型创建方法,以下是几种常用的实现方式:

方法1:合并数组后创建(最直接)

先获取验证后的字段数组,再将额外字段追加进去,最后调用create方法:

public function store(StoreAdvertisementRequest $request): RedirectResponse
{
    $validated = $request->validated();
    $validated['user_id'] = Auth::id();
    $validated['status_id'] = AdvertisementStatus::WAITING_FOR_PROPOSAL;

    $advertisement = Advertisement::create($validated);

    // 后续逻辑,比如跳转等
    return redirect()->route('advertisements.show', $advertisement);
}

方法2:分步填充与保存

如果需要对模型做更多额外操作,可以先实例化模型,填充验证字段后再手动赋值额外属性,最后保存:

public function store(StoreAdvertisementRequest $request): RedirectResponse
{
    $advertisement = new Advertisement();
    $advertisement->fill($request->validated());
    $advertisement->user_id = Auth::id();
    $advertisement->status_id = AdvertisementStatus::WAITING_FOR_PROPOSAL;
    $advertisement->save();

    // 后续逻辑
    return redirect()->route('advertisements.show', $advertisement);
}

方法3:在请求类中追加字段(适合全局复用场景)

如果这两个字段在多个地方都需要添加,可以在StoreAdvertisementRequest类中重写validated方法,自动追加字段:

// app/Http/Requests/StoreAdvertisementRequest.php
public function validated()
{
    $validated = parent::validated();
    $validated['user_id'] = Auth::id();
    $validated['status_id'] = AdvertisementStatus::WAITING_FOR_PROPOSAL;
    
    return $validated;
}

之后控制器里直接使用$request->validated()就包含了这两个字段:

public function store(StoreAdvertisementRequest $request): RedirectResponse
{
    $advertisement = Advertisement::create($request->validated());

    // 后续逻辑
    return redirect()->route('advertisements.show', $advertisement);
}

重要提醒

确保你的Advertisement模型已经将user_id和status_id添加到$fillable属性中,否则会触发Laravel的批量赋值保护错误:

// app/Models/Advertisement.php
protected $fillable = [
    // 其他允许批量赋值的字段
    'user_id',
    'status_id',
];

内容的提问来源于stack exchange,提问作者Floris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:47:40