【问题标题】:Laravel get specific relation dataLaravel 获取特定的关系数据
【发布时间】:2016-06-25 17:35:22
【问题描述】:

假设我有一个名为 UserActivity 的表和模型。

每一行都有以下字段:iduser_id

当我使用他的 user 关系查询 UserActivity 时,我得到了所有 user 信息:他的 ID、电子邮件和其他一些我不需要的字段。从这个关系中我需要的只是用户名字段。

假设我当前的查询要获取所有这些字段,我如何才能从关系中仅获取 3-4 个特定字段:

return UserActivity::with('user')
        ->orderBy('created_at','desc')
        ->take(5)->get();

关系是BelongsTo

【问题讨论】:

  • 在涉及 UserActivity 和 User 的所有查询中,您是否只需要该用户信息,还是只需要该特定查询?
  • 所有涉及 UserActivity 的查询都可以很好

标签: laravel


【解决方案1】:

此查询将只返回关系中的“col1”、“col2”等列。

return UserActivity::with(['user' => function($q) { 
                                       $q->select('id','col1', 'col2', ...); 
                                     }])
        ->orderBy('created_at','desc')
        ->take(5)->get();

如果您想确保这些列是从 UserActivity 加载用户对象的所有查询中加载的唯一列,您可以这样修改关系,

function user()
{
     return $this->belongsTo(...)->select(['col1, 'col2', ...]);
}

【讨论】:

  • 谢谢,效果很好-只是为了说明清楚:在您的答案中添加用户ID 列必须包含在$q->select 查询中,没有它user 将始终为null .
  • 你是对的!谢谢!当 id 不存在时加入失败。
【解决方案2】:
return UserActivity::with(['user' => function ($query) {$query->select('name', 'email')}])
    ->orderBy('created_at','desc')
    ->take(5)->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2021-05-06
    • 2014-09-17
    • 2020-07-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多