Laravel 5中如何从Admins表取值并保存到Jobs表?
你的JobController Store方法确实有几处需要修正的地方
先梳理下你的场景:已登录的管理员创建职位时,自动将自身的school字段值填入Jobs表的schoolname字段。你的代码思路是对的,但存在几个关键问题:
- 语法错误:数组内的
'schoolname' => $admin->school;多了一个分号,这会导致PHP语法报错,应该去掉分号。 - 当前登录用户的获取方式有误:直接在方法参数注入
Admin $admin,Laravel会尝试从路由参数中匹配Admin实例,而不是获取当前已登录的管理员。你需要通过认证系统获取当前用户,比如使用auth()->user()或者Auth::user()(记得引入Illuminate\Support\Facades\Auth)。 - 缺少批量赋值权限:Laravel默认开启批量赋值保护,你需要在
Job模型中定义$fillable属性,允许jobposition、jobdesc、schoolname这三个字段被批量赋值,否则create()方法会忽略这些字段。 - 缺少请求验证:没有对提交的
jobposition和jobdesc进行必填验证,容易出现空数据存入数据库的情况。 - 缺少响应返回:方法最后没有返回任何响应,前端无法知道操作是否成功,通常需要重定向或者返回JSON响应。
修正后的代码示例:
首先,更新Job模型的$fillable:
// app/Models/Job.php class Job extends Model { protected $fillable = ['jobposition', 'jobdesc', 'schoolname']; }
然后修正JobController的store方法:
use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; public function store(Request $request) { // 1. 请求验证 $validated = $request->validate([ 'jobposition' => 'required|string', 'jobdesc' => 'required|string', ]); // 2. 获取当前登录的管理员 $admin = Auth::user(); // 3. 创建职位,注意语法修正 Job::create([ 'jobposition' => $validated['jobposition'], 'jobdesc' => $validated['jobdesc'], 'schoolname' => $admin->school ]); // 4. 返回响应,比如重定向到职位列表页 return redirect()->route('jobs.index')->with('success', '职位创建成功!'); }
如果你的路由使用了路由模型绑定且确保只有管理员能访问该路由,也可以通过auth()->user()直接获取当前用户,这样更安全,避免注入错误的Admin实例。
内容的提问来源于stack exchange,提问作者eibersji
相关产品推荐
相关产品推荐

