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

如何使用Eloquent ORM获取指定列值?基于Laravel模型关联优化查询

问题解答

首先需要修正你当前的关联定义错误,你写反了两个模型的关联类型,修正后如下:

  • User 模型(一对多关联,一个用户对应多个订阅)
public function subscriptions()
{
    return $this->hasMany(Subscription::class, 'sub_id');
}
  • Subscription 模型(从属关联,一个订阅归属于一个用户)
public function user()
{
    return $this->belongsTo(User::class, 'sub_id');
}

针对你原代码的需求(判断用户是否有订阅记录),基于关联的最优查询写法如下:

$is_subscription = $user->subscriptions()->exists();

该写法会直接执行SELECT EXISTS()查询,仅返回布尔值,无需读取多余字段,性能比你现有写法更高,代码可读性也更强。

如果有其他场景可以参考对应的写法:

  • 需要获取用户所有订阅数据:
$subscriptions = $user->subscriptions;
  • 查询多个用户时避免N+1性能问题,使用预加载:
$users = User::with('subscriptions')->get();
  • 获取用户最新一条订阅记录:
$latestSubscription = $user->subscriptions()->latest()->first();

内容的提问来源于stack exchange,提问作者Code cracker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:27:04