php - 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 | | | 民族| | | ... | +-------+--------+
解决方案
您不能不选择用于查询关系的列。在您的示例中,这是父模型id
和相关模型的camp_id
.
我强烈建议不要->select([..])
在关系定义中使用列。这将不必要地限制关系的使用。
相反,您应该省略某种转换器(例如Eloquent 资源)中的列,这些转换器会转换资源以供最终用户查看。
推荐阅读
- coldfusion - Coldfusion - 奇怪的 parsedatetime 结果
- python - 如何在 Django 中向我的模型添加其他字段
- prolog - 在 Prolog 中编码这个逻辑语句: G ↔ ~Provable(x)
- jenkins - Docker 未在 Jenkins 管道中运行
- python - cPanel 中的 Flask 显示公用文件夹下图像的 404
- c# - C# | 控制台应用程序 | 如何在执行下一行之前让程序等待(以毫秒为单位的时间)?
- c# - 打开 DataReader,必须关闭:在本地工作,部署失败。网页接口
- groovy - 仅从数组中获取唯一值
- rest - 我可以通过 REST 创建侧边栏链接吗?
- jquery - IE9 中的 jQuery.dialog() UI 故障