Laravel 父母,孩子,拉拉维尔孩子的孩子
我有三种模式,省,市和工作 省具有以下特点:Laravel 父母,孩子,拉拉维尔孩子的孩子,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有三种模式,省,市和工作 省具有以下特点: public function cities() { return $this->hasmany('City'); } public function province() { return $this->belongsTo('Province', 'province_id'); } public function jobs() { return $this->hasmany('Job'); } pub
public function cities() {
return $this->hasmany('City');
}
public function province() {
return $this->belongsTo('Province', 'province_id');
}
public function jobs() {
return $this->hasmany('Job');
}
public function city() {
return $this->belongsTo('City', 'city_id');
}
城市具有以下特点:
public function cities() {
return $this->hasmany('City');
}
public function province() {
return $this->belongsTo('Province', 'province_id');
}
public function jobs() {
return $this->hasmany('Job');
}
public function city() {
return $this->belongsTo('City', 'city_id');
}
作业具有以下功能:
public function cities() {
return $this->hasmany('City');
}
public function province() {
return $this->belongsTo('Province', 'province_id');
}
public function jobs() {
return $this->hasmany('Job');
}
public function city() {
return $this->belongsTo('City', 'city_id');
}
我正在努力得到每个省的工作总数,但下面的结果不起作用。如果有人能指出我做错了什么,我会很感激的
$province->cities->jobs->count()
谢谢 这是因为城市是一个
集合
你必须循环遍历每一个城市,以获得工作编号并将其相加
控制器内部:如是
$job_count = 0;
$province->cities->each(function ($city) use ($job_count){
$job_count += $city->jobs->count();
});
$job\u count
将等于每个it城市内的工作总数
请注意:务必立即加载关系数据,以减少对数据库的查询量。
$province = Province::with('cities', 'cities.jobs')...
您已经准备好在
elount
中使用解决方案,无需加载所有内容并对集合进行count
// Province
public function jobs()
{
return $this->hasManyThrough('Job', 'City');
}
那么就:
$province->jobs()->count();
它运行simpleSELECT count(*)
,而不加载冗余集合
// Province
public function jobs()
{
return $this->hasManyThrough('Job', 'City');
}
此外,如果您需要使用省集合,请使用以下方法:
public function jobsCount()
{
return $this->jobs()->selectRaw('count(*) as aggregate')->groupBy('province_id');
}
public function getJobsCountAttribute()
{
if ( ! array_key_exists('jobsCount', $this->relations)) $this->load('jobsCount');
return $this->getRelation('jobsCount')->first()->aggregate;
}
使用此功能,您可以一次轻松获得多个省份的计数(仅执行2个查询):
谢谢你,马特。我正在努力获得该省而不是该市的就业总数。有什么建议吗?太好了!谢谢你的帮助,救了我一天!这可能会发出数十个/数百个查询来进行计数。“所以小心点,”拉斐尔说,“如果他想装的话,就别装了。”。而->count()
是Eloquent\Collection
上的一个方法,除非执行以下操作:$city->jobs()->count()代码>@MattBurrow,如果他真的想加载,就不会了。可能应该在回答中提到这一点。这里不是很确定,但是$provice->cities()->jobs()->count()
可能会起作用,如果起作用,性能会更好。@Raphael_uu我之前也试过,但很遗憾没有起作用,给出了以下错误:调用未定义的方法illumb\Database\Query\Builder::jobs()