如何从BelongsTo关联关系中获取模型ID?尝试$this->id无返回
解决Laravel模型中$this->id无返回值的问题
核心排查方向
- 模型实例是否已持久化:如果是新创建的
Part实例还没执行save(),自增主键id还未生成,$this->id自然为空。必须用从数据库查询出的实例,或者保存后的实例调用关联。 - 查询是否包含id字段:如果查询时用了
select()指定字段但漏了id,比如Part::select('surv_id')->first(),模型实例中没有id属性,调用$this->id会返回空。 - 模型主键是否配置正确:如果
Part模型的主键不是id(比如用surv_id作为主键),需要在模型中定义protected $primaryKey = 'surv_id';,此时应该用$this->surv_id而非$this->id获取主键值。
验证步骤(在artisan tinker中执行)
- 确认模型实例是否包含id字段:
$part = Part::find(1); # 替换为数据库中存在的主键值 dd($part); # 查看输出的模型数据中是否有id字段
- 测试保存后的实例:
$part = new Part(); # 填充模型所需的必填字段 $part->surv_id = '示例值'; $part->save(); echo $part->id; # 此时应输出生成的id值 $part->inv; # 再调用关联方法查看输出
修正后的关联方法示例
class Part extends Model { // 若模型主键不是id,需添加此行配置 // protected $primaryKey = 'surv_id'; public function inv(): BelongsTo { echo "foo\n"; // 增加空值判断,避免无意义输出 echo $this->id ?? '无有效id值' . "\n"; return $this->belongsTo( Inv::class, 'surv_id', 'surv_id' ); } }
内容的提问来源于stack exchange,提问作者DevonDahon
相关产品推荐
相关产品推荐

