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

Laravel中图片无法存入MySQL数据库的技术求助

Laravel图片上传本地成功但数据库未写入的问题排查与解决

让我帮你梳理下问题,从你的代码里能看到几个关键的地方可能导致图片路径没写入数据库:

1. 字段名不匹配(最可能的核心原因)

你在控制器里把图片文件名存在了$input['image'],但视图里却用$employee->photo来调用数据库字段——这说明你的数据库表字段应该是photo,而不是image!

修改控制器代码,把image改成photo:

public function store(Request $request) { 
    $validator = Validator::make($request->all(), [ 
        'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', 
    ]); 

    if ($validator->passes()) { 
        $input = $request->all(); 
        // 把这里的image改成photo,对应数据库字段
        $input['photo'] = time().'.'.$request->image->getClientOriginalExtension(); 
        $request->image->move(public_path('images'), $input['photo']); 
        Employee::create($input); 
        return response()->json(['success'=>'done']); 
    } 

    return response()->json(['error'=>$validator->errors()->all()]); 
}

2. 模型未设置可填充字段

Laravel的create()方法只会写入$fillable数组里允许的字段,你需要确保Employee模型里包含了photo(或者image,看你实际数据库字段名):

class Employee extends Model
{
    protected $fillable = [
        'name', 'bank_id', 'bankbranch_id', 'phone', 'email', ..., 'photo' // 新增photo字段到可填充列表
    ];
}

3. 视图里的图片标签错误

你的视图里图片标签既没正确闭合,asset()路径里还多了多余空格,这会导致图片显示异常,修正后:

<td>
    <img src="{{ asset('images/'.$employee->photo) }}" width="50px" height="50px">
</td>

4. AJAX响应未返回创建后的员工数据

你当前的AJAX成功回调里试图用data.photo,但控制器只返回了['success'=>'done'],没有返回创建好的Employee对象。修改控制器的响应:

// 替换原来的return语句
$employee = Employee::create($input);
return response()->json(['success'=>'done', 'employee' => $employee]);

然后在AJAX的success里调整为:

success:function(data) { 
    $('.error').remove(); 
    let emp = data.employee;
    $('#table').append(`<tr class='post${emp.id}'>
        <td>${emp.id}</td>
        <td>${emp.name}</td>
        <td><img src="${asset('images/'+emp.photo)}" width='50px' height='50px'></td>
        <td>${emp.bank.name}</td>
        <td>${emp.bankbranch.location}</td>
        <td>${emp.created_at}</td>
        <td>
            <button class='show-modal btn btn-info btn-sm' data-id='${emp.id}' data-bank_id='${emp.bank.name}' data-bankbranch_id='${emp.bankbranch.location}' data-name='${emp.name}' data-phone='${emp.phone}'><span class='fa fa-eye'></span></button>
            <button class='edit-modal btn btn-warning btn-sm' data-id='${emp.id}' data-bank_id='${emp.bank.name}' data-bankbranch_id='${emp.bankbranch.location}' data-name='${emp.name}' data-phone='${emp.phone}'><span class='glyphicon glyphicon-pencil'></span></button>
            <button class='delete-modal btn btn-danger btn-sm' data-id='${emp.id}' data-bank_id='${emp.bank.name}' data-bankbranch_id='${emp.bankbranch.location}' data-name='${emp.name}' data-phone='${emp.phone}'><span class='glyphicon glyphicon-trash'></span></button>
        </td>
    </tr>`); 
}

优先排查第1和第2点,这两个是最可能导致数据库未写入图片路径的原因。

内容的提问来源于stack exchange,提问作者nawshin.ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:04:27