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

Laravel使用Yajra Datatables获取bus_code时报非对象属性错误

错误原因

该报错本质是Schedule模型与BusTransport的关联查询返回了null,访问null对象的bus_code属性触发异常。
核心问题为Laravel belongsTo关联的默认外键规则与实际表字段不匹配:

  • Laravel belongsTo关联默认会将关联方法名转为蛇形后拼接_id作为外键字段名,你的关联方法命名为busTransport,默认会匹配bus_transport_id作为外键,但schedule表中存储车辆关联的字段为bus_id,因此关联查询找不到对应数据返回空。
  • 其余Trip、BusConductor关联正常是因为刚好符合默认规则:关联方法名trip对应外键trip_id、关联方法名busConductor转蛇形为bus_conductor对应外键bus_conductor_id,字段完全匹配因此查询正常。

解决方案

  1. 修正关联定义:在Schedule模型的busTransport关联中手动指定外键为bus_id
// app/Models/Schedule.php
public function busTransport(){
    return $this->belongsTo(BusTransport::class, 'bus_id');
}
  1. 增加空值兼容处理:避免后续因数据缺失(如关联记录被删除)再次触发同类报错,修改控制器中bus_code字段的返回逻辑:
// Schedule Controller
->addColumn('bus_code', function($row){
    // 关联为空时返回默认提示,不会报错
    return optional($row->busTransport)->bus_code ?? '未分配车辆';
    // PHP 8.0+ 也可以用null安全运算符写法
    // return $row->busTransport?->bus_code ?? '未分配车辆';
})

内容的提问来源于stack exchange,提问作者Say Jack

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:05