如何在 Laravel Pivot 模型上调用函数

Bak*_*kly 3 php pivot-table laravel laravel-4

我试图获取课程中每个用户的出勤情况,其中用户和课程具有多对多关系,并且出勤表基于该关系。但我无法$user->pivot->attendance();直接调用,我必须调用枢轴对象本身,这样我就可以调用它的函数,正如您在答案中看到的那样

以下是我的数据库方案的示例

我需要跑

$users=$course->users;
foreach($users as $user)
{
    $user->pivot->attendance(); //error in this line
}
Run Code Online (Sandbox Code Playgroud)

这一行给出了错误

调用未定义的方法 Illuminate\Database\Query\Builder::attendance()

用户

id
name
etc
Run Code Online (Sandbox Code Playgroud)

培训班

id
name
startDate
endDate
Run Code Online (Sandbox Code Playgroud)

课程用户

id
course_id
user_id
payment
regDate
status
Run Code Online (Sandbox Code Playgroud)

用户出席率

id
course_user_id
time
inOrOut
Run Code Online (Sandbox Code Playgroud)

这是 CourseUserPivot 类

class CourseUserPivot extends Eloquent {


    protected $table ="course_user";



    public function course()
    {
        return $this->belongsTo('Course'); 
    }

    public function user()
    {
        return $this->belongsTo('User'); 
    }

    public function attendance()
    {
        return $this->hasMany('Userattendance','course_user_id');
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:$user->pivot-> payment可以工作并显示属性,但我无法调用方法

Bak*_*kly 5

您不能使用$user->pivot->attendance();,因为这会调用用户对象的出勤,而不是枢轴对象的出勤

您必须获取枢轴对象,然后像这样调用该函数

CourseUserPivot::find($user->pivot->id)->attendance();
Run Code Online (Sandbox Code Playgroud)

让用户知道您在使用 withPivot() 函数的地方将 id 包含在数组中

class Course{
...
...
public function users()
    {
        return $this->belongsToMany('Candidate')
                    ->withPivot('id',
                    'summary',
                    'status',
                    'payment'

                    );
    }
}
Run Code Online (Sandbox Code Playgroud)