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

Laravel Eloquent关联报错:Trying to get property 'title' of non-object

问题分析与解决思路

嘿,我来帮你捋捋这个问题!你遇到的Trying to get property 'title' of non-object错误,其实核心原因很可能比你想的更直接,咱们一步步拆解:

先抓最直接的原因:find(1)没找到数据

你说employee::first()->title能正常运行,但find(1)->title报错,这说明数据库里根本不存在emp_no=1的员工记录!find(1)返回了null,你自然没法访问null的title属性。

先验证这个点:

$employee = employee::find(1);
dd($employee); // 看看输出是不是null

如果确实是null,那你只要换一个数据库里存在的emp_no值来测试,问题应该就解决了。

再确认你的主键配置是否真的生效

虽然你怀疑Laravel没识别到主键是emp_no,但从first()能正常关联的情况来看,配置大概率是对的,不过咱们可以再验证下:

$testEmp = employee::first();
dd($testEmp->getKeyName()); // 正常应该输出'emp_no'

如果输出是id,那才是主键配置的问题,这时候可以检查:

  • 模型是不是正确继承了Illuminate\Database\Eloquent\Model
  • 有没有其他代码(比如父类模型、Trait)偷偷覆盖了$primaryKey属性

另外提个小建议:Laravel的模型类名建议首字母大写(比如Employee、Title),关联方法名用复数更贴合语义(一个员工有多个头衔,所以改成titles()),这样代码更规范,也能避免一些潜在的自动加载问题:

// Employee模型里的关联改成复数
public function titles() {
    return $this->hasMany('App\Title', 'emp_no');
}
// 调用的时候就是$employee->titles

最后再排查复合主键的小细节

你的titles表用了复合主键,Laravel对复合主键的支持确实有限,但在这个belongsTo/hasMany的关联场景下,只要emp_no关联是对的,就不会有问题,不用太担心这个点。

内容的提问来源于stack exchange,提问作者Kasra GH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:41