Eloquent hasMany 没有 id 的关系
Posted
技术标签:
【中文标题】Eloquent hasMany 没有 id 的关系【英文标题】:Eloquent hasMany relation without id 【发布时间】:2020-05-31 20:57:30 【问题描述】:我要计算来自同一个国家的注册数量。 到目前为止,我提出了以下解决方案: 控制器内部方法:
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 | | |民族| | | ... | +-------+--------+【问题讨论】:
【参考方案1】:你可能想做类似的事情:
$camp->registrations_nation_count->makeHidden('camp_id');
使用'with'后
【讨论】:
是的。它导致空输出。"registrations_nation_count": []
啊,这个方法registrations_nation_count()在你的camp模型里面吗?
是的,没错。我编辑了问题并添加了类定义和重要变量。【参考方案2】:
您不能不选择用于查询关系的列。在您的示例中,这是父模型的 id
和相关模型的 camp_id
。
我强烈建议不要在关系定义中使用->select([..])
列。这将不必要地限制关系的使用。
相反,您应该省略某种转换器(例如Eloquent resources)中的列,该转换器会转换资源以供最终用户查看。
【讨论】:
我了解资源背后的概念,但是如何在不使用 select 的情况下计算所有注册在同一个国家/地区?以上是关于Eloquent hasMany 没有 id 的关系的主要内容,如果未能解决你的问题,请参考以下文章
Eloquent 将可选条件添加到外键为 null 的 hasMany
Laravel Eloquent 中的多级深度 hasMany 关系
Eloquent 自定义关系 hasMany(外域包含由外键连接的文本)
使用 Laravel Eloquent 的 hasMany 来开发无限极分类
使用 Laravel Eloquent 的 hasMany 来开发无限极分类
Laravel 5.6和Eloquent将子模型持久化到数据库中,无法从模型中找到hasMany或belongsTo方法