如何在laravel枢轴模型上调用函数

时间:2014-08-11 01:24:57

标签: php laravel laravel-4 pivot-table

我试图让每个用户参加一个课程,其中用户和课程有很多关系,出勤表是基于这种关系。 但是我无法直接调用$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->支付工作并显示属性,但我无法调用方法

2 个答案:

答案 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()方法中之前,我一直无法按需运行它。

对于某些情况,我的数据库结构为:

  • 用户表
    • id
  • 项目表
    • id
  • Sets表(定义一个集合及其实例中的项目)
    • id
  • Set_User表(自定义数据透视模型,由用户创建的集合的实例)
    • id,set_id,user_id
  • Items_SetUser表(属于用户的集合实例的项目)
    • item_id,setuser_id

我在控制器中执行此操作,以获取具有用户自定义数据透视表数据的用户实例的所有集合:

$user_sets = \Auth::user()->sets()->withPivot('id', 'name')->get();

然后在刀片中,我可以像这样访问与每个设置实例关联的项目:

$set->pivot->set_items()->count()

在withPivot()的调用中不包含“ id”,则上述操作是不可能的。请注意,set_items()是自定义数据透视模型上的一种方法,用于定义与items表的关系。