[英]Eloquent hasMany relation without 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 列。 我已经尝试简单地从选择中删除它,但这导致根本没有输出。 有什么办法可以隐藏吗?
数据库:
+-------+--------------------+ | camps | camp_registrations | +-------+--------------------+ | id | id | | ... | camp_id | | | nation | | | ... | +-------+--------------------+
您不能不选择用于查询关系的列。 在您的示例中,这是父模型的id
和相关模型的camp_id
。
我强烈建议不要在关系定义中使用->select([..])
列。 它会不必要地限制关系的使用。
相反,您应该省略某种转换器(例如Eloquent resources )中的列,这些转换器转换资源以供最终用户查看。
您可能想要执行以下操作:
$camp->registrations_nation_count->makeHidden('camp_id');
使用 'with' 后
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.