ManyToMany 关系 - 如何更新数据透视表中的属性 table
ManyToMany relation - how update attribute in pivot table
我现在正在学习使用 pivot tables: https://laravel.com/docs/4.2/eloquent#working-with-pivot-tables
我有 WeeklyRoutine
型号。每个例程都有几个活动。分配的活动附加在枢轴 table activity_routine
.
中
WeeklyRoutine
模型中定义的关系:
return $this->belongsToMany('App\Models\Activity', 'activity_routine', 'routine_id', 'activity_id')->withPivot('done_at')->withTimestamps();
}
看起来像这样:
// activity_routine pivot table (relevant columns only)
| id | activity_id | routine_id | done_at |
| 34 | 1 | 4 | 2016-04-23 09:27:27 | // *1
| 35 | 2 | 4 | null | // *2
*1 此 activity 使用以下代码标记为已完成
*2 这个activity还没有完成
我有:
我可以更新数据透视表 table 中的 done_at
字段,从而将其标记为给定周的完成(上面代码中的 weeklyroutine_id = 4
public function make_an_activity_complete($routineid, $activityid) {
$date = new \DateTime;
$object = Routine::find($routineid)->activities()->updateExistingPivot($activityid, array('done_at' => $date));
return 'done!';
}
我需要的
我想撤消 activity。当它已经完成时,即当 done_at
不是 null
buc 包含日期时,将其设为 null
。
换句话说,我需要做下面的值切换,但是正确的方法是:
$pivot = DB::table('activity_routine')->where('routine_id, $routineid)->where('activity_id, $activityid)->first();
if($pivot->done_at != null) {
$new_val = new \DateTime;
} else {
$new_val = null;
}
$object = Routine::find($routineid)->activities()->updateExistingPivot($activityid, array('done_at' => $new_val));
怎么做?我不知道!
谢谢。
我觉得你的方法不错。我可能会这样做。
$routine = Routine::find($routineid);
$activity = $routine->activities()->find($activityid);
$done_at = is_null($activity->pivot->done_at) ? new \DateTime : null;
$routine->activities()->updateExistingPivot($activityid, compact('done_at'));
我现在正在学习使用 pivot tables: https://laravel.com/docs/4.2/eloquent#working-with-pivot-tables
我有 WeeklyRoutine
型号。每个例程都有几个活动。分配的活动附加在枢轴 table activity_routine
.
WeeklyRoutine
模型中定义的关系:
return $this->belongsToMany('App\Models\Activity', 'activity_routine', 'routine_id', 'activity_id')->withPivot('done_at')->withTimestamps();
}
看起来像这样:
// activity_routine pivot table (relevant columns only)
| id | activity_id | routine_id | done_at |
| 34 | 1 | 4 | 2016-04-23 09:27:27 | // *1
| 35 | 2 | 4 | null | // *2
*1 此 activity 使用以下代码标记为已完成 *2 这个activity还没有完成
我有:
我可以更新数据透视表 table 中的 done_at
字段,从而将其标记为给定周的完成(上面代码中的 weeklyroutine_id = 4
public function make_an_activity_complete($routineid, $activityid) {
$date = new \DateTime;
$object = Routine::find($routineid)->activities()->updateExistingPivot($activityid, array('done_at' => $date));
return 'done!';
}
我需要的
我想撤消 activity。当它已经完成时,即当 done_at
不是 null
buc 包含日期时,将其设为 null
。
换句话说,我需要做下面的值切换,但是正确的方法是:
$pivot = DB::table('activity_routine')->where('routine_id, $routineid)->where('activity_id, $activityid)->first();
if($pivot->done_at != null) {
$new_val = new \DateTime;
} else {
$new_val = null;
}
$object = Routine::find($routineid)->activities()->updateExistingPivot($activityid, array('done_at' => $new_val));
怎么做?我不知道!
谢谢。
我觉得你的方法不错。我可能会这样做。
$routine = Routine::find($routineid);
$activity = $routine->activities()->find($activityid);
$done_at = is_null($activity->pivot->done_at) ? new \DateTime : null;
$routine->activities()->updateExistingPivot($activityid, compact('done_at'));