计算在会议中注册的参与者的数量(此集合实例上不存在属性[参与者])

时间:2018-07-25 16:08:54

标签: php laravel

我有以下代码可以计算会议的注册数量:

        $registrationsCount = $conference->registrations->count();

它可以正常显示特定会议中的正确注册数量。但是,必须要获得在会议中注册的参与者的数量,因为一个注册可以关联多个参与者。你知道要实现吗?

在ID为1的会议中具有3个注册的Db结构示例。ID为3的注册具有关联的2个参与者,其他2个注册仅具有1个参与者。

会议表:

id  name
1   conference test 1

注册表:

id    conference_id        user_that_did_registration
1           1                            2
2           1                            2
3           1                            2

参与者表:

id      registration_id      registration_type_id          name      
1               1                   1                       Jake       
2               2                   1                       John
3               3                   1                       Paul
4               3                   2                       Peter

参与者模型:

class Participant extends Model
{


    public function registration(){
        return $this->belongsTo('App\Registration');
    }


    public function registration_type(){
        return $this->belongsTo('App\RegistrationType');
    }

}

注册模型:

class Registration extends Model
{
    public function customer(){
        return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
    }

    public function participants(){
        return $this->hasMany('App\Participant');
    }

    public function registration_types(){
        return $this->belongsToMany('App\RegistrationType', 'participants');
    }

    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}

会议模型:

class Conference extends Model
{


    public function registrationTypes(){
        return $this->hasMany('App\RegistrationType', 'conference_id');
    }

    public function registrations(){
        return $this->hasMany('App\Registration', 'conference_id');
    }
}

不要像“ $ registrationsCount = $ conference-> registrations-> participants-> count();”那样工作。它显示“此集合实例上不存在属性[参与者]。”。

1 个答案:

答案 0 :(得分:0)

您应尝试将collections的嵌套collection属性称为方法:

$conference->registrations->participants()->count(); 

此外,也许您应该为参与者传递外键:

class Registration extends Model
{
    public function customer(){
        return $this->belongsTo(User::class, 'user_that_did_registration', 'id');
    }

    public function participants(){
        return $this->hasMany('App\Participant', 'registration_id');
    }

    public function registration_types(){
        return $this->belongsToMany('App\RegistrationType', 'participants');
    }

    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}

最后,尝试在会议模型中添加hasManyThrough:

class Conference extends Model
{


    public function registrationTypes(){
        return $this->hasMany('App\RegistrationType', 'conference_id');
    }

    public function registrations(){
        return $this->hasMany('App\Registration', 'conference_id');
    }

    public function participants(){
   return $this->hasManyThrough('App\Participant', 'App\Registration', 'conference_id');
    }


}