【发布时间】:2014-04-11 17:43:27
【问题描述】:
我有以下表格:
用户:
userID
...
课程:
lessonID
...
Users_Lessons_Status(充当数据透视表并保存其他信息):
userID references User.userID
lessonID references Lessons.lessonID
latestSectionID
percentComplete
我想要做的是,对于每个用户,对于每节课,数据透视表中应该有一行显示用户在该课中完成了多少以及他们最新的部分 ID 是什么。也就是说,userID 和 lessonID(主键?)应该有一个唯一的对。
我已经这样设置了我的模型:
<?php
class User extends Eloquent implements UserInterface, RemindableInterface {
...
public function lessonStatuses()
{
return $this->belongsToMany('Lesson', 'users_lessons_status', 'lessonID', 'userID')->withPivot('latestSectionID', 'percentComplete');
}
}
<?
class Lesson extends Eloquent {
protected $table = 'lessons';
protected $primaryKey = 'lessonID';
public function userStatuses()
{
return $this->belongsToMany('User', 'users_lessons_status', 'userID', 'lessonID');
}
}
?>
我现在的路线是这样的:
Route::post('dbm/users/setLatestSectionID', function() {
if(Auth::check()) {
$user = User::find(Input::get('userID'));
$lesson = Lesson::find(Input::get('lessonID'));
$us = $user->lessonStatuses();
$us->attach($lesson->lessonID,
["latestSectionID" => Input::get('latestSectionID'), "percentComplete" => Input::get('percentComplete')] );
}
});
这可行,但是,每次我为相同的userID 和lessonID 更新它时,它都会创建一个新行,因此这对不再是唯一的。为此我应该使用哪些方法?我在文档中尝试了save()、attach() 和push(),但我不确定在这里使用哪一个。
编辑:澄清一下,生成的表格应如下所示:
id|userID|lessonID|latestSectionID|percentComplete
1 1 1 X Y
2 1 2
3 1 3
4 2 1
5 3 1
6 3 2
....
编辑 2:修复了 User->belongsToMany() 方法并添加了 withPivot 调用。
【问题讨论】:
标签: php mysql laravel eloquent