我试图让每个用户参加一个课程,其中用户和课程有很多关系,出勤表是基于这种关系。
但是我无法直接调用$user->pivot->attendance();
我必须自己调用它的枢轴对象,所以我可以调用它的函数,你可以在答案中看到
以下是我的数据库方案的示例
我需要运行
$users=$course->users;
foreach($users as $user)
{
$user->pivot->attendance(); //error in this line
}
这一行给出了错误
调用未定义的方法 照亮\数据库\查询\生成器::出勤()
用户
id
name
etc
课程
id
name
startDate
endDate
course_user
id
course_id
user_id
payment
regDate
status
userattendance
id
course_user_id
time
inOrOut
这是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');
}
}
P.S:$ user-> pivot->支付工作并显示属性,但我无法调用方法
答案 0 :(得分:2)
您无法使用$user->pivot->attendance();
,因为这会调用不在数据透视对象上的用户对象
您必须获取数据透视对象,然后像这样调用函数
CourseUserPivot::find($user->pivot->id)->attendance();
让用户使用withPivot()函数,在数组中包含id
喜欢
class Course{
...
...
public function users()
{
return $this->belongsToMany('Candidate')
->withPivot('id',
'summary',
'status',
'payment'
);
}
}
答案 1 :(得分:0)
我试图完成同样的事情,但直到将我的自定义数据透视模型的'id'列包含在withPivot()方法中之前,我一直无法按需运行它。
对于某些情况,我的数据库结构为:
我在控制器中执行此操作,以获取具有用户自定义数据透视表数据的用户实例的所有集合:
$user_sets = \Auth::user()->sets()->withPivot('id', 'name')->get();
然后在刀片中,我可以像这样访问与每个设置实例关联的项目:
$set->pivot->set_items()->count()
在withPivot()的调用中不包含“ id”,则上述操作是不可能的。请注意,set_items()是自定义数据透视模型上的一种方法,用于定义与items表的关系。