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

Laravel如何修改hasOne关联获取Beam对应最新及上一条BeamData记录

方案1:用hasMany返回最新2条的集合

适合需要统一遍历处理最新2条数据的场景:
修改关联代码如下:

/**
 * 需要默认预加载的关联
 *
 * @var array
 */
protected $with = ['beam_data'];

/**
 * 获取关联的最新2条BeamData数据(新到旧排序)
 */
public function beam_data()
{
    return $this->hasMany(BeamData::class, 'beam_id')
        ->orderBy('created_at', 'desc')
        ->take(2);
}

使用说明:

  • 返回结果为Illuminate\Database\Eloquent\Collection类型,无关联数据时为空集合,不足2条时按实际数量返回
  • 索引0对应最新数据,索引1对应第二新数据(如果存在)
  • 要求Laravel版本≥8.42,可支持预加载时每个Beam模型独立返回2条关联数据

方案2:拆分两个独立hasOne关联

适合需要单独调用最新、次新数据的场景,兼容性更好:
修改关联代码如下:

/**
 * 需要默认预加载的关联
 *
 * @var array
 */
protected $with = ['latest_beam_data', 'previous_beam_data'];

/**
 * 获取最新的1条BeamData
 */
public function latest_beam_data()
{
    return $this->hasOne(BeamData::class, 'beam_id')
        ->orderBy('created_at', 'desc');
}

/**
 * 获取第二新的1条BeamData
 */
public function previous_beam_data()
{
    return $this->hasOne(BeamData::class, 'beam_id')
        ->orderBy('created_at', 'desc')
        ->offset(1);
}

使用说明:

  • 无关联数据时两个属性均返回null,仅存在1条数据时previous_beam_data返回null
  • 可独立调用任意关联,无需额外判断集合下标
  • 兼容所有支持hasOne关联的Laravel版本,低版本预加载也不会出现数据错误

内容的提问来源于stack exchange,提问作者Ryan H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:24:01