首页 > 解决方案 > Eloquent hasMany 没有 id 的关系

问题描述

我要计算来自同一个国家的注册数量。到目前为止,我提出了以下解决方案:控制器内部的方法:

class Camp extends Model // ...
{
    protected $with = ['registrations_nation_count',...];
    // ...

    public function registrations_nation_count()
    {
        return $this->hasMany(CampRegistration::class)
            ->select(['camp_id','nation',DB::raw('COUNT(*) as count')])
            ->groupBy('nation');
    }
}

这会生成以下输出:

      "registrations_nation_count": [
            {
                "camp_id": 1,
                "nation": "en",
                "count": 2
            },
            {
                "camp_id": 1,
                "nation": "fr",
                "count": 1
            }
        ]

现在我想从输出中删除 camp_id 列。我已经尝试简单地将其从选择中删除,但这根本不会导致输出。有什么办法可以隐藏吗?

数据库:

+-------+--------+
| 营地 | camp_registrations |
+-------+--------+
| 编号 | 编号 |
| ... | camp_id |
| | 民族|
| | ... |
+-------+--------+

标签: phpsqllaraveleloquentrelationship

解决方案


您不能不选择用于查询关系的列。在您的示例中,这是父模型id和相关模型的camp_id.

我强烈建议不要->select([..])在关系定义中使用列。这将不必要地限制关系的使用。

相反,您应该省略某种转换器(例如Eloquent 资源)中的列,这些转换器会转换资源以供最终用户查看。


推荐阅读