我该如何在连接两种不同类型实体的中间表上设置软删除?我已经添加了 deleted_at 列,但文档说我需要将其放入模型中:
protected $softDelete = true;
当然,我没有中间表的模型。有任何想法吗?您可以对Eager Load进行约束:
public function groups()
{
return $this
->belongsToMany('Group')
->whereNull('group_user.deleted_at') // Table `group_user` has column `deleted_at`
->withTimestamps(); // Table `group_user` has columns: `created_at`, `updated_at`
}
不要使用硬删除来解除关系:
User::find(1)->groups()->detach();
你应该像这样使用软删除:
DB::table('group_user')
->where('user_id', $user_id)
->where('group_id', $group_id)
->update(array('deleted_at' => DB::raw('NOW()')));
User::find(1)->groups()->detach();
进行软删除。 - iatboy->update(['deleted_at' => Carbon\Carbon::now()]);
。 - Theo KouzelisModel::withTrashed()
和 Model::onlyTrashed()
的方法。 - Steen Schütt您还可以使用Laravel的Eloquent BelongsToMany
方法updateExistingPivot
。
$model->relation->updateExistingPivot($relatedId, ['deleted_at' => Carbon\Carbon::now()]);
所以按照 @RonaldHulshof 的例子,您有一个用户模型和一个组关系,这是一种 belongsToMany
关系。
public function groups() {
return $this->belongsToMany(Group::class)->whereNull('groups_users.deleted_at')->withTimestamps();
}
为了软删除关联表的条目,您可以执行以下操作。
$user->groups()->updateExistingPivot($groupId, ['deleted_at' => Carbon\Carbon::now()]);
wherePivot('deleted_at', null)
替代 whereNull('groups_users.deleted_at')
,两者的作用是相同的。 - ibnɘꟻdeleted_at
,然后按照R. Hulshof的回答进行操作 :) - carbontwelve