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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:19:39