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

Laravel中如何像获取Auth::user()->id一样获取exercise id写入数据表

解决方案

你要给exercises_id字段赋值,先确认这个ID的来源,对应两种常规实现方式:

场景1:练习ID由前端表单提交传入

这是最普遍的场景,比如用户在具体练习页点击「添加到我的练习」,表单会携带对应练习ID,直接从请求中获取即可,和你取description、place字段的逻辑完全一致,记得先加参数校验防止非法数据入库:

public function assign(Request $request)
{
    // 参数校验
    $validated = $request->validate([
        'description' => 'required|string',
        'done' => 'required|boolean',
        'place' => 'required|string',
        'duration' => 'required|integer',
        'exercises_id' => 'required|exists:exercises,id', // 校验传入的练习ID在exercises表真实存在
    ]);

    $myexercises = MyExercises::create([
        'description' => $validated['description'],
        'done' => $validated['done'],
        'user_id'  => Auth::user()->id,
        'exercises_id' => $validated['exercises_id'],
        'place'  => $validated['place'],
        'duration'  => $validated['duration'],
    ]);

    return redirect()->route('myexercises.index');
}

你之前单独写的id()方法完全没必要,而且存在3个问题:

  • 方法没有注入Request实例,内部根本拿不到$request变量
  • 查询的是My_exercises用户练习关联表,不是存储练习基础数据的exercises表,逻辑方向错了
  • 方法没有返回值,就算查到数据也没法在assign方法里调用

场景2:需要按业务逻辑查询指定练习ID

如果练习ID不是前端传入,而是要按固定业务规则获取(比如取系统默认练习、匹配特定标签的练习),直接通过Exercise模型查询后取ID即可,用法和Auth::user()->id一致,都是取模型实例的属性:

public function assign(Request $request)
{
    $validated = $request->validate([
        'description' => 'required|string',
        'done' => 'required|boolean',
        'place' => 'required|string',
        'duration' => 'required|integer',
    ]);

    // 示例:取最新创建的练习ID,查询条件按你实际业务改就行
    // 比如按练习名查就是 Exercise::where('name', '核心训练')->first()
    $targetExercise = Exercise::latest()->first();
    
    // 记得加非空判断,避免查不到数据时取id报错
    if (!$targetExercise) {
        return back()->withErrors('未找到对应练习');
    }

    $myexercises = MyExercises::create([
        'description' => $validated['description'],
        'done' => $validated['done'],
        'user_id'  => Auth::user()->id,
        'exercises_id' => $targetExercise->id,
        'place'  => $validated['place'],
        'duration'  => $validated['duration'],
    ]);

    return redirect()->route('myexercises.index');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:15:41