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
相关产品推荐
相关产品推荐

