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

Laravel中如何从MySQL数据表获取指定银行ID对应的州名

解决Laravel中根据bank_id查询多值关联州的问题

你的问题核心在于州表的bank_id字段存储的是逗号分隔的多值字符串,原代码用精确匹配where("bank_id", $request->bank_id)无法命中包含目标ID的记录,需要借助MySQL的FIND_IN_SET函数实现匹配逻辑。

修改后的控制器代码

public function getState(Request $request)
{
    $states = DB::table("states")
        ->whereRaw("FIND_IN_SET(?, bank_id)", [$request->bank_id])
        ->pluck("name", "id");
    return response()->json($states);
}

代码说明

  • 使用whereRaw执行原生SQL,避免Laravel查询构造器的转义限制
  • FIND_IN_SET(?, bank_id)会检查传入的bank_id是否存在于目标字段的逗号分隔字符串中,返回所有匹配的州记录

数据库设计优化建议

当前的多值存储方式违反数据库第一范式,存在诸多弊端:

  • 无法利用索引,数据量增大后查询性能会急剧下降
  • 维护成本高(比如移除某个关联bank_id时需要复杂的字符串操作)
  • 无法通过外键约束保证数据一致性

建议重构为多对多关联表:

  1. 创建中间表bank_state,包含bank_id和state_id两个字段
  2. 在Laravel的Bank和State模型中定义多对多关联关系
  3. 后续可通过模型关联轻松实现查询,同时保证性能与数据完整性

内容的提问来源于stack exchange,提问作者Sk Mohiuddin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:39:40